2017-01-02 7 views
1
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; 
} 

私のコードは正常に動作しています。しかし、私は、これは実際に再帰これは再帰と見なされますか?

+0

ええ、なぜあなたはそれがないと思うのですか? – Mritunjay

+0

はい、それを呼び出す関数はすべて再帰関数と呼ばれます。たとえそれが単一のケースに対してのみ呼び出されても... –

+0

再帰はeメソッドを単独で呼び出しています。あなたの場合、 'q0'の定義の中で' q0'メソッドを呼び出しています。だからあなたは再帰を使用しています –

答えて

2

これで技術的に再帰的な、はい、以来q0()呼び出し自体である場合を確認する必要があります。

これは、しかし、欠陥があります。呼び出し間で変更される外部変数contを使用します。むしろそれが変更可能な外部の状態であることとは別の呼び出しの間に渡されたパラメータでcont持つことがはるかに良いでしょう。

この:

return q0(cont + 1); 

また、この分岐は珍しいです:

else if(word[cont] == 'b'){ 
    q1(); 
} 

はそれがreturn q1();べきか?

cont++; 
return q0(); 

このなりますかあなたの意図は、q1の戻り値を転送することです。または、q1()は実際に副作用がありますか?後者の場合、それは巨大なコードの匂いです。

関連する問題