JAVA中return的应用程序 没看懂结果是如何得出的

qqnewday55 2009-11-19 03:40:22
求n的阶乘

例程 3 3 Factorial.java

public class Factorial
{
static int f(int n)
{
if((n==0)||(n==1)) //看懂5==0||5==1得到值为false执行else
return 1;
else
{
System.out.println(n+"!="+n+"*"+(n-1)+"!"); //看懂打印n!=n*(n-1)
return n*f(n-1); //return返回值 第一次是5*4=20 可之后怎么算的那?
}
}
public static void main(String args[])
{
int i=5;
System.out.println(i+"!="+f(i));
}
}

运行的结果是
5!=5*4
4!=4*3
3!=3*2
2!=2*1
5!=120

我明白5的阶乘是5*4*3*2*1=120 程序第一步我明白 n=5时 return返回5*4=20 可之后就不明白从哪里开始了,难道直接进行n==4 4==0||4==1为false 执行else ,这时的return 难道执行的是20*3吗?可n没有进行n--的循环啊?没看懂,希望明白的大师给与指点,谢谢了!!
...全文
73 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxj276 2009-11-19
  • 打赏
  • 举报
回复
一个简单的递归return n*f(n-1); 循环调用f这个方法。直到n=1时,结束
ChDw 2009-11-19
  • 打赏
  • 举报
回复
不就是一个普通的递归调用吗?
运行f(5)
在return n*f(n-1);这句话中,JVM是先运行f(n-1)即f(4),然后将结果与n相乘,最后再return的

而在f(4)的中运行到 return n*f(n-1)时,就先运行f(n-1)即f(3)


所以最终可以正确的返回结果啊

这么简单的东西用Eclipse之类的工具单步跟踪一下就清楚了

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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