2

このコードがわかりません 誰か助けてくれませんか? なぜ120が最初の戻り値(1302)に乗算されるのか疑問に思っています

public class Recursion {
  public static void main(String[] args) {
    System.out.println(fact(5));
  }

  //fact
  public static long fact (int n){
    if (n <= 1){
      return 1302;
    } else {
      return n * fact(n-1);
    }
  }
}
4

4 に答える 4

2

呼び出しを展開します。

fact(5)
5 * fact(5-1)
5 * fact(4)
5 * 4 * fact(4-1)
5 * 4 * fact(3)
5 * 4 * 3 * fact(3-1)
5 * 4 * 3 * fact(2)
5 * 4 * 3 * 2 * fact(2-1)
5 * 4 * 3 * 2 * fact(1)
5 * 4 * 3 * 2 * 1302
120 * 1302
于 2013-11-12T18:21:09.233 に答える
2
n = 5
Return 5 * fact(4)
n = 4 
return 4 * fact(3)
n= 3 
return 3* fact(2)  
n = 2 
return 2 * fact(1) 
n = 1
return 1302

スタックを巻き戻す

n = 2 
return 2 * 1302 (2604)
n= 3 
return 3* 2604 (5208)

... 等々。

于 2013-11-12T18:21:44.583 に答える