2017-11-08 13 views
-6

これらの2つのコードの出力が異なるのはなぜですか?それを反転させずにプリントシリーズ正常:再帰関数:関数呼び出しの前後のprintステートメント

FUNC 1:

public static void printSeriesInReverse(int n){ 
    if (n > 0){ 
    System.out.println(n); 
    printSeriesInReverse(n-1); 
    } 

FUNC 2は、予想通り、逆方向に直列を印刷します。

public static void printSeriesInReverse(int n){ 
    if (n > 0){ 
    printSeriesInReverse(n-1); 
    System.out.println(n); 
} 

printステートメントまたは関数呼び出しが最初に来るかどうかは、このように劇的な違いがあるのはなぜですか?

+1

あなたはどうしますか?コードがどのように動作するかを確認しますか?手でそれをトレースします。 – Blorgbeard

+0

http://idownvotedbecau.se/noresearch/ – Buzz

+0

私は再帰を初めて学んでいる、私はプログラミングでは新しいので、単純な "簡単な"ものを理解していないために私を許してください。 –

答えて

0

再帰関数であるためです。あなたはなるだろう最初のケースでは

...あなたが n=3とそれを呼び出すとしましょう:

printSeriesInReverse(3) 
3 > 0 // YES 
    prints 3 
    printSeriesInReverse(2) 
    2 > 0 // YES 
    prints 2 
    printSeriesInReverse(1) 
    1 > 0 // YES 
     prints 1 
     printSeriesInReverse(0) 
     0 > 0 // NO 
     // End of recursion 

最終的な出力:

printSeriesInReverse(3) 
3 > 0 // YES 
    printSeriesInReverse(2) 
    2 > 0 // YES 
    printSeriesInReverse(1) 
    1 > 0 // YES 
     printSeriesInReverse(0) 
     0 > 0 // NO 
     // End of recursion 
     prints 1 
    prints 2 
    prints 3 
:あなたはなるだろう後者の場合については 321

最終出力:123

+0

今は明らかです。私は2番目の関数でprintステートメントに苦労していました。とても有難い。 –

+0

ええ、再帰はややこしいかもしれません。あなたがそれを持ってうれしい – Piyin

関連する問題