2016-12-17 21 views
-4

私はプログラミングが初めてで、本に書かれた再帰の例を見ました。'return'でメソッドが終了する場合、この階乗再帰はどのように機能しますか?

returnがメソッド実行を終了する場合、どのように動作しますか?

public class Recursion{ 

public static void main(String[] args) { 
    Scanner s = new Scanner(System.in); 
    System.out.print("Type a number -> "); 
    int n = s.nextInt(); 
    n = factorial(n); 
    System.out.println("FACTORIAL : " + n); 
} 

static private int factorial(int n) { 
    if (n == 0) { 
     System.out.println("-- REACHED ZERO! " + n); 
     return 1; // even if the method reach this condition, it doesn't stop the method, but why? 
    } 
    System.out.println("N: " + n); 
    int r = n * factorial(n - 1); 
    System.out.println("R: " + r); // even with the 'return 1;' line, this will print. But how does that works? 
    return r; 
} 

私は、コードを実行すると、予想通りの結果がある:それは最終的な値を返しているので

Type a number -> 5 
    N: 5 
    N: 4 
    N: 3 
    N: 2 
    N: 1 
    -- REACHED ZERO! 0 
    R: 1 
    R: 2 
    R: 6 
    R: 24 
    R: 120 
    FACTORIAL : 120 
+1

'int r = n *階乗(n - 1)'。自分自身を呼び出します。それは再帰です。 –

+0

再帰とは、自身を呼び出すメソッドを意味します。簡単な言葉では、自分で双子を雇って、単独で扱うことができる計算を扱う人などです。メソッドが返ってくると、プログラムの全体ではなくメソッドの現在のインスタンスまたは発生が停止されます。それは、最終的に生まれた双子が彼の計算を彼の長老の双子に渡して死ぬことを意味する。 –

+0

詳細については、http://introcs.cs.princeton.edu/java/23recursion/(http://www.fredosaurus.com/JavaBasics/methods/methods-25-calls.html)を参照してください。 )。 –

答えて

0

復帰すると、すべてのメソッドの終わりです。再帰とは、何かが0に達するまで起き続けることを意味し、いったんそれを行うと、ある点で実行を停止するという意味でメソッドを1に戻します。もしそれが答えを受け入れるならば、これを明確にしたいと思ってください:)

0

階乗はSystem.out.println()の呼び出しの5行目で起こると考えてください。そのメソッドが戻るとき、何が起こるのですか?プログラムフローは次の行に進みます。これは階乗の呼び出しです。したがって、その関数が返ってくると、println-flowの呼び出しがprintlnの別の呼び出しである次のステートメントに続き、何が起こったかと同じ動作になります。

0

return文は、現在のメソッドの実行を終了します。再帰を使用すると、このメソッドを何回か呼び出すので、同じメソッドの多くの実行のうちの1つを終了するだけです。

関連する問題