2017-11-22 26 views
1

私は出力が321で123ではない理由を理解しようとしています。私は複数回試してみましたが、講義スライドを見ていましたが、まだ解決策が見つかりません。再帰 - Javaプログラミング

public static void main(String[] args) { 
    printNumber(1); 
} 

public static void printNumber(int n) { 
    if(n!=4) { 
     printNumber(n + 1); 
     System.out.print(n); 
    } 
} 
+2

再帰を理解できない場合は、最初からこの文を読んでください。 –

+0

申し訳ありませんが、上記の文章に間違いがあります。私は答えが123ではなく321である理由を理解しようとしています。 –

+3

System.out.printに遭遇したときにコードを段階的に実行して( ' (n) ' – Century

答えて

7

printNumberを呼び出すたびに、printNumber(n+1)最初を呼び出し、次に何かを出力します。だからprintNumber(n+1)はすでに終了してからprintNumber(n)が番号を印刷します。

main(): 
    printNumber(1): 
     printNumber(2): 
      printNumber(3): 
       printNumber(4) // does nothing 
       print(n) // "3" 
       // printNumber(3) completes, returning control to printNumber(2) 
      print(n) // "2" 
      // printNumber(2) completes, returning control to printNumber(1) 
     print(n) // "1" 
     // printNumber(1) completes, returning control to main() 
    // main() completes 
+0

明確な説明をありがとう。 –

1

変数nはどちらかあなたが最初に印刷されているどのような1、2または3

nまたはn + 1n + 1を最初に印刷し、次にnを印刷しています。したがって、数字は逆の順序で出てくる必要があります。

0

あなたはprint文System.out.print(n)前に再帰呼び出し文printNumber(n + 1) を置いてきた、それは私たちの例のようにnへの最後の呼び出しn+1から番号を印刷します、その後、それは4に到達するまで、それはそれを呼び出すrecursivly続けることをこの結果の理由3から1

にこれを試してみてください。

public static void printNumber(int n) { 
    if(n!=4) { 
     System.out.print(n); 
     printNumber(n + 1); 
    } 
} 

あなたが出力を見つける:123

その理由は、再帰呼び出しのたびに番号nが出力されるため、には別の時刻がにあります。4に達するまで、それはn+1に別の時刻を呼び出します。