方法内调用方法,不知道你见过没

longer5153458 2013-09-05 04:58:25
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));
}
}
...全文
161 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
无聊找乐 2013-09-09
  • 打赏
  • 举报
回复
递归都不知道~
fsh2008 2013-09-09
  • 打赏
  • 举报
回复
很常见的递归算法。
wang171838 2013-09-09
  • 打赏
  • 举报
回复
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),最后出结果. 以前我对递归也很糊涂,你可以去看看数据结构.
tony4geek 2013-09-05
  • 打赏
  • 举报
回复
这个是递归方法。
  • 打赏
  • 举报
回复
递归没学过吗,楼主,应该好好补补大学计算机课程

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧