我有一个阶乘代码
class FactorialTest {
public static void main(String args[]){
System.out.println(factorial(10));
}
public static int factorial(int N){
if (N <= 1) return 1;
return N*factorial(N-1);
}
}
使用Trace跟踪它,这是输出:
这是否意味着递归部分总是首先完成,而乘法是稍后?
答案 0 :(得分:0)
必须首先进行递归,因为它是乘法的参数。在递归完成之前,什么会成倍增加?
但我认为你的Trace输出不会告诉你。我只是在阅读完代码后回答。
答案 1 :(得分:0)
使用尾递归可以实现阶乘,但在你的代码中,乘法跟随递归调用,因此无法应用尾部优化。
答案 2 :(得分:0)
当然必须首先评估递归调用。您将两个表达式相乘,其中一个只是一个值(N
),另一个是递归调用。如果不进行调用并首先获得结果,您希望将其乘以N
?