2010-11-13 70 views
0

我有一个阶乘代码跟踪执行的顺序在Java中

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

这是否意味着递归部分一直做首先,乘法是后来?

回答

0

递归必须先完成,因为它是乘法的一个参数。在递归完成之前,甚至会增加什么?

虽然我不认为你的跟踪输出会告诉你。我只是在阅读代码后才回答。

0

使用尾递归实现阶乘是可能的,但是在您的代码中,乘法遵循递归调用,因此无法应用尾部cail优化。

0

当然,递归调用必须先评估。您正在乘以两个表达式,其中一个是简单的值(N),另一个是递归调用。如果没有先打电话并得到结果,您希望如何将其乘以N