2016-05-23 12 views
1

単語が回文かどうかを知るには、StringBuilderの逆関数またはCollectionsの逆関数を使用するなどの方法がありますが、再帰を学習するには、この方法でそれを書いた。私は繰り返し作業していました。再帰を使用して解を試してみる

埋め込まれたelse文でtrueが追加されていますが、デバッグモードでこれを実行するとfalseが返され、次にcheckPalindromeが呼び出されるため、何をすべきか分かりませんなぜそれが戻って終了する必要がありますので、理解していないのですか?私が間違ってやっていることや、それをどうやってこのように働かせるかの説明を本当にうれしく思います。

public static boolean checkPalindrome(Deque deq) { 
    if(deq.pollFirst() != deq.pollLast()) { 
     return false; 
    } else { 
     if(deq.size() == 1 || deq.size() == 0) { 
      return true; 
     } else { 
      checkPalindrome(deq); 
      return true // TODO ?? figure out What to put here ?? 
     } 
    } 
} 

答えて

2

自分で電話するときは何も返されません。あなたはその下のコメントでフォロー質問は、再帰的な方法がどのように機能するかを説明したいために私をリードしていますが、本質的には、それらはすべて、以下の擬似をたどる

else { 
    return checkPalindrome(deq); 
} 

:他に、内側の文はこれをお読みくださいコード:どんなにあなたがメソッドを呼び出したときに、それが何か...それは何か自分自身を返します、またはそれ自体のいくつかの他のコールが返すものは何でも返します。どちらかを返します。何、

public boolean someMethod(T[] someArrayOrList) { 
    // return true -OR- 
    // return false -OR- 
    // call yourself and return whatever that call returns 
} 

。ある意味ではすべての応答をAND'ingしていますが、実際にはTRUEは1回しか生成されません。

+1

_膝と叫び声** ** noooo ** 私は答えが...かもしれないと心配していたので、どうして混乱しましたか?それは各インスタンス上でANDですか? – Spider

+0

あなたはコンセプトを持っていました。あなたの失敗は、再帰的メソッドを構築する方法を学ぶ際の一般的なものです。 –

+0

それはあなたが提案した方法で動作しますが、なぜ私はスーパーであるのか、偽を返し、次のステートメントを実行するかtrueを返します。それから次のステートメントに進みます。それとも、以前のリターンの価値を得ているのでしょうか?どのようにそれを知ることは終わりですか? TRUE、TRUE、次にTRUE、FALSEを返します。TRUE && TRUE && FALSEを返します。 – Spider

関連する問題