关于阶乘递归的问题
看了2天递归的问题,除了百度还是百度,也已经知道递归就是自己调用自己,但是这个阶乘的递归还是没理解下来。
自己也尝试过试数,但是试数下来之后都已经不明白自己在干嘛,思路有些混乱~
希望有大神可以帮我把 f(n-1) * n 的执行过程分析出来,思路什么的。
{:2_38:}{:2_38:}{:2_38:}{:2_38:}{:2_38:}
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 在电脑内部递归运算是用栈来存储的,先一层一层向下递归,然后一层一层返回,
比如说主席想知道今天卖的鸡蛋多少钱一个,
主席问省长:今天鸡蛋多少钱一个。
省长问市长:今天鸡蛋多少钱一个。
市长问县长:今天鸡蛋多少钱一个。
县长问村长:今天鸡蛋多少钱一个。
村长问卖鸡蛋的人:今天鸡蛋多少钱一个。
卖鸡蛋的人对村子说: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. 呵呵呵,看看{:1_1:} f(3) = 3 * f(2) = 3 * 2 * f(1) = 3 * 2 * 1 递归的话,关键是理解函数栈
递归的思路就是让函数压栈
当函数押栈结束的时候,就是相当于上面的f(1)==1的时候
函数开始出栈,并计算
1*2
2*3...
有个数列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
在return 1 的地方设置断点
然后调试运行,看下函数堆栈
页:
[1]