【发布时间】:2013-11-03 23:06:00
【问题描述】:
我正在尝试理解以下问题:
public class Main {
public static int fact(int n){
if (n == 0){
return 1;
}else{
return n * fact(n - 1);
}
}
public static void main(String[] args){
System.out.print(fact(5));
}
}
当编译器通过并执行 return n * fact(n - 1); 时,它实际上是乘以 n 还是仅在达到基本情况后才这样做,然后乘以存储在堆栈中的所有值?
请注意,我对这种递归编码方式仍然很陌生。
【问题讨论】:
-
一些简单的调试和/或添加产生输出的语句会揭示很多。
-
我知道,但这就是我不断得到的结果:与目标 VM 断开连接,地址:'127.0.0.1:55768',传输:'socket'
-
查看乘法执行顺序的好方法是将
n * fact(...)替换为mult(n, fact(...)),其中mult是您编写的一种方法,它接受两个数字并返回它们的乘积。然后你可以在mult中添加一些输出打印,并查看调用的顺序。