BlackRabbit 发表于 2014-7-13 23:41:38

关于阶乘递归的问题



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

绝尘の初 发表于 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

1012662902 发表于 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.

风雪傲月3728 发表于 2014-7-19 16:25:46

呵呵呵,看看{:1_1:}

牡丹花下死做鬼 发表于 2014-7-19 16:31:48

f(3) = 3 * f(2) = 3 * 2 * f(1) = 3 * 2 * 1

戏++ 发表于 2014-7-19 19:31:52

递归的话,关键是理解函数栈
递归的思路就是让函数压栈
当函数押栈结束的时候,就是相当于上面的f(1)==1的时候
函数开始出栈,并计算
1*2
2*3...

xiawb 发表于 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=*3=[(1)*2]*3=6

戏++ 发表于 2014-7-25 17:20:17

在return 1 的地方设置断点
然后调试运行,看下函数堆栈
页: [1]
查看完整版本: 关于阶乘递归的问题