import java.util.*;public class StackTraceTest
{
public static int factorial(int n)
{
System.out.println("factorial("+ n +"):");
Throwable t = new Throwable();
StackTraceElement [] frames = t.getStackTrace();//这几个看不懂啥意思
for(StackTraceElement f : frames)//这几个看不懂啥意思
System.out.println(f);//这几个看不懂啥意思
int r;
if(n <= 1) r =1;
else 
{
System.out.println(n);
r =n * factorial(n - 1);//方法又调用方法,factorial(n - 1)这里的值应该是int型呀,可是输出结果却像个循环的,真得很乱
}
System.out.println("return " + r);

return r;
}
public static void main(String [] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Enter n:");
int n = in.nextInt();
System.out.println(factorial(n));
}
}

解决方案 »

  1.   

    t.getStackTrace();返回的是一个 StackTraceElement类型的数组对象,
    for(StackTraceElement f : frames) 这是foreach的写法,迭代数组对象的所有元素, factorial(n)方法调用了factorial(n - 1),类推 factorial(n - 1)调用了 factorial(n - 2)...
    一直到n<=1时,这个递归程序找到了出口,再一个一个返回,  factorial(1), factorial(2)... factorial(n),最后出结果.
    以前我对递归也很糊涂,你可以去看看数据结构.