Java 核心技术(第八版)卷1:基础知识:例11-1P482StackTraceTest

import java.util.*;

import java.util.Scanner;

//本程序显示 递归方法调用的 trace 特性
public class StackTraceTest {
    //计算某个数字的阶乘
    public static  int factorial(int n)
    {
        System.out.println("factorial("+n+"):");
        Throwable t=new Throwable();
        StackTraceElement[] frames=t.getStackTrace();//返回stack trace 元素的数组
        //StackTraceElement:An element in a stack trace, as returned by Throwable.getStackTrace().
        // 代表了stack trace 中的 一个元素,会通过Throwable.getStackTrace()返回
        // Each element represents a single stack frame. All stack frames except for the one
        //每个元素代表了一个单一的 stack frame 。除了stack 顶部的之外,所有的stack frames 均代表了一个方法的调用
        // at the top of the stack represent a method invocation.
        // The frame at the top of the stack represents the execution point at which the stack trace
        //顶部的frame 代表着这个stack trace 被创建时候的执行点。
        // was generated. Typically, this is the point at which the throwable corresponding to the
        // stack trace was created.
        for(StackTraceElement f:frames)
            System.out.println(f);
        int r=0;
        if(n==0) r=0;
        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 in=new Scanner(System.in);
        System.out.println("Enter n : ");
        int n=in.nextInt();
        factorial(n);
    }

}

运行时候:

Enter n : 
3

即运算 3的阶乘,会输出以下:

factorial(3):
StackTraceTest.factorial(StackTraceTest.java:11)
StackTraceTest.main(StackTraceTest.java:36)
factorial(2):
StackTraceTest.factorial(StackTraceTest.java:11)
StackTraceTest.factorial(StackTraceTest.java:27)
StackTraceTest.main(StackTraceTest.java:36)
factorial(1):
StackTraceTest.factorial(StackTraceTest.java:11)
StackTraceTest.factorial(StackTraceTest.java:27)
StackTraceTest.factorial(StackTraceTest.java:27)
StackTraceTest.main(StackTraceTest.java:36)
return 1
return 2
return 6

这程序有点复杂,我被搞晕了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值