2016-04-24 4 views
0

のは、あなたがメソッドを持っているとしましょう:私は気づいた何Javaで再帰クローズアクションを処理する方法は?

Object recursiveMethod() { 
    // do some things to an object. 
    Object obj = new Object(); 

    if (test fails) { 
     recursiveMethod(); // do the function again until it fails. 
    } 

    System.out.println("Returning object"); 
    return obj; 
} 

機能は、それが失敗した場合にキューに入れられます、そして後にスタックからポップされていることでした。それが印刷される5回失敗したのであれば、:

Returning object //success 
Returning object //failure 
Returning object //failure 
Returning object //failure 
Returning object //failure 
Returning object //failure 

を一度だけReturning object文のプリントを持っているための最良の方法は何ですか? http://www.toves.org/books/java/ch17-recur/

+0

再帰的メソッドを呼び出す_wrapping_メソッドを使用します。その後、コンソール出力をラッピングメソッドに置き、再帰的なメソッドからコンソール出力を削除します。 – Seelenvirtuose

+0

それはうまくいくだろうが、私はジョンクーゲルマンの説明がよりエレガントだと思う。 – and0rsk

+0

'else'を印刷する行の前に置きます。 – EJP

答えて

2

あなたは再帰呼び出しの結果を返す必要があります。ここでは

は、私は再帰に行ってきた研究の一部です。さもなければ、それを呼び出していますが、戻り値を捨てて、代わりにテストに失敗したオブジェクトを返します。

if (test fails) { 
    return recursiveMethod(); 
} 

これは良い学習課題ですが、それは良い考えではありません。再帰は、スタックを再試行するたびに長くなるため、再試行を実装するには貧弱な方法です。あなたが何度もやり直すと、最終的にはオーバーフローします。ループを使用するほうがはるかに優れています。

while (true) { 
    //do some things to an object. 
    Object obj = new Object(); 

    if (test succeeds) { 
     System.out.println("Returning object"); 
     return obj; 
    } 
} 
関連する問題