首先贴一段java代码
package day12.xunlian;
import java.util.Scanner;
public class StackTranceTest {
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 r=n*factorial(n-1);
System.out.println("return "+r);
return r;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("enter:");
int n=sc.nextInt();
factorial(n);
}
}
建议打一个断点然后debug运行看看他到底是怎么输出的便于理解(贴出运行结果)
我觉得打了断点之后应该很好理解吧,
t.getStackTrace()里面获取的是堆栈信息,你可把他考虑成一个栈(就是),每执行一次factorial()都会有个信息进入到栈中(准确的说是入栈)
所以输出的时候才是那个样子的。
(结果是:6。咳咳)