跟踪Java中的执行顺序

时间:2010-11-13 05:48:38

标签: java recursion trace

我有一个阶乘代码

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跟踪它,这是输出:

alt text

这是否意味着递归部分总是首先完成,而乘法是稍后?

3 个答案:

答案 0 :(得分:0)

必须首先进行递归,因为它是乘法的参数。在递归完成之前,什么会成倍增加?

但我认为你的Trace输出不会告诉你。我只是在阅读完代码后回答。

答案 1 :(得分:0)

使用尾递归可以实现阶乘,但在你的代码中,乘法跟随递归调用,因此无法应用尾部优化。

答案 2 :(得分:0)

当然必须首先评估递归调用。您将两个表达式相乘,其中一个只是一个值(N),另一个是递归调用。如果不进行调用并首先获得结果,您希望将其乘以N