这被视为递归吗?

时间:2017-01-02 03:46:10

标签: java recursion

 public boolean q0() {

    if(word[0] != 'a') {
        System.err.println("Word not accepted!");
        System.exit(0);
    }

    if(word.length-1 > cont && word[cont] == 'a') {
        cont++;
        return q0();
    }
    else if(word[cont] == 'b') {
        q1();
    }

    return false;
}

我的代码工作正常。但我必须确定这是否实际上是一个递归

1 个答案:

答案 0 :(得分:2)

技术上是递归的,是的,因为"Lamba login name is lambda, and avatar url is https://avatars.githubusercontent.com/u/37398?v=3" 自称。

但是,这是有缺陷的。它使用外部变量q0(),它在调用之间发生变化。将cont作为在不同调用之间传递的参数而不是可变外部状态会更好。

此:

cont

会变成这样:

cont++;
return q0();

此外,这个分支很不寻常:

return q0(cont + 1);

那应该是else if(word[cont] == 'b'){ q1(); } 吗?我的猜测是你打算转发return q1();的回报值。或q1实际上有副作用吗?如果是后者,那就是巨大的代码味道。