2016-12-13 4 views
-1
public static void foo(int n) { 

    if(n > 0) { 
     if(n % 2 == 0) { 
      foo(n - 3); 
     } else { 
      foo(n - 1); 
     } 
    } 

    System.out.println(n); 
} 

私はここで再帰的な方法を理解していません。私はそれが-1を印刷する方法を見ますが、 "-1 2 3"がどのように印刷されるのか理解していません。どんな助けもありがとう。私がやったこの再帰メソッドは、単に終了するのではなく、3回印刷されますか?

方法は、これはプロセスであるfoo(3)

+1

あなたは、それが呼び出された方法を示していませんでした。パラメータの値は? –

+0

申し訳ありません、編集済み – 79t97g

+4

IDEデバッガでステップアップしましたか?それはここで求めているよりも簡単で速くなり、実際に何かを学ぶでしょう。 –

答えて

3

で呼ばれていた。..

foo(3) --> foo(2) 
//because (3 % 2 != 0) 

foo(2) --> foo(-1) 
//because (2 % 2 == 0) 

foo(-1) --> print -1 
//because (-1 < 0) 
//goes back & continue from last point where this method is called 

print 2, then exit method 
//goes back & continue from last point where this method is called 

print 3, then exit method 
//goes back & continue from last point where this method is called 

back to main() 

は、私はそれを視覚化するpythontutor.comを使用しますが、私はなぜそれの後に得ることはありません-1を出力すると、 "n%2"行に戻ります。

-1を印刷した後でも、それでもexそのメソッドは-1を出力しますが、foo(-1)が呼び出された場所から戻り、続けます。それはそこから続きます。

1

再帰的な方法は、それと同じ方法を依頼することによって続けています。 3%2=1はので、これは次に = foo (2);が呼び出されますELSE一部 を要求します:あなたはfoo (3);

がタイム1要求コード内 。 時間2:2%2=0これが要求するIF部分 次にfoo (2-3) = foo (-1)が呼び出されます。 時間3:-1 > 0 = Falseしたがって、印刷メソッドが呼び出されます。

-1が表示されます。 時間3機能が終了し、2機能が終了したと3を印刷する時間1つの機能

システムになります2 時間を表示しますタイム2機能

システムになります。

ので、出力 -1 2 3

関連する問題