鱼C论坛

 找回密码
 立即注册
查看: 1874|回复: 7

关于阶乘递归的问题

[复制链接]
发表于 2014-7-13 23:41:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
11111.jpg

看了2天递归的问题,除了百度还是百度,也已经知道递归就是自己调用自己,但是这个阶乘的递归还是没理解下来。
自己也尝试过试数,但是试数下来之后都已经不明白自己在干嘛,思路有些混乱~
希望有大神可以帮我把 f(n-1) * n 的执行过程分析出来,思路什么的。
{:2_38:}{:2_38:}{:2_38:}{:2_38:}{:2_38:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-18 17:13:59 | 显示全部楼层
n*f(n-1)=n*(n-1)*f(n-1-1)=n*(n-1)*(n-2)*f(n-2-1)=n*(n-1)*(n-2)*……*1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-18 20:07:24 | 显示全部楼层
在电脑内部递归运算是用栈来存储的,先一层一层向下递归,然后一层一层返回,
比如说主席想知道今天卖的鸡蛋多少钱一个,
主席问省长:今天鸡蛋多少钱一个。
省长问市长:今天鸡蛋多少钱一个。
市长问县长:今天鸡蛋多少钱一个。
县长问村长:今天鸡蛋多少钱一个。
村长问卖鸡蛋的人:今天鸡蛋多少钱一个。
卖鸡蛋的人对村子说:1毛1个。
村长对县长说:1毛1个。
县长对市长说:1毛1个。
市长对省长说:1毛1个。
省长对主席说:1毛1个。
然后主席就知道了  。

以上虽然不准确,但是很形象的表示出递归的步骤。
对于本题,
首先是n=3, f(3)=f(2)*3.
然后递归n=2,  f(2)=f(1)*2;
然后递归n=1,  因为1==n,所以返回到f(2).
f(2)=1*2;
然后返回到f(3),
f(3)=1*2*3.
然后返回到主函数main中  输出6.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-19 16:25:46 | 显示全部楼层
呵呵呵,看看{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-19 16:31:48 | 显示全部楼层
f(3) = 3 * f(2) = 3 * 2 * f(1) = 3 * 2 * 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-19 19:31:52 | 显示全部楼层
递归的话,关键是理解函数栈
递归的思路就是让函数压栈
当函数押栈结束的时候,就是相当于上面的f(1)==1的时候
函数开始出栈,并计算
1*2
2*3...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-25 15:35:54 | 显示全部楼层
有个数列f(x),x是自然数;
f(1)=1;
当x>1时,f(x)=f(x-1)*x;
求f(3):
解:
f(3)=f(2)*3=[f(1)*2]*3=[(1)*2]*3=6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-25 17:20:17 | 显示全部楼层
在return 1 的地方设置断点
然后调试运行,看下函数堆栈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 17:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表