版上各位好,
小弟最近刚学C++
目前看到递回函式的地方有点小问题
递回函式的经典范例就是拿来计算阶乘
但我有一个地方有点不太懂
程式码如下 :
int factorial(int n) {
if (n == 1)
return 1;
else
return (n * factorial(n - 1));
}
在输入的n不为1的时候会一直不断地呼叫自己做计算
当n==1时停止
但当它不断呼叫自己直至n=1时不是会被return 1吗?
为何最终的答案还是阶乘正确计算的数值呢?
请教版上各位大神解答
感谢!
1*2*3*...n-1*n 会从内而外乘回来纸上画个图,或者print执行过程 追踪一下就知道了
我写的是c 然后n<1就 return 1 想请问 我原本打成return 0 然后输入4的时候 一样输出会是0 这是为何
作者:
Lipraxde (Lipraxde)
2020-03-14 01:53:00因为 "0 * n = 0 " 啊
作者:
LPH66 (-6.2598534e+18f)
2020-03-14 05:06:00每呼叫一次就多一层, 一个 return 只有回传一层而已
可是我n=4的时候不是应该return n*facetorial(n-1)吗怎么跟return0有关系
阿最下层的递回不就是1*fact(0),你又写成fact(0) return 0,不就变成1*0,那每一层都是*0阿而且0!也会是1,这个从最根本的地方就错了吧
作者:
CoNsTaR ((const *))
2020-03-14 14:32:00你一年的最后一小时赚 500 块你年薪就 500 吗 XD
pool大网址里的解释这样我就懂了!感谢!!这边感谢大家的回复^_^
作者:
LPH66 (-6.2598534e+18f)
2020-03-14 22:31:00于是这里再来推广观念: 递回就是数学归纳法fact(0) return 0 的问题就是基础状况不一样所以结果不一样
查一下阿卡曼方程 实做上不会很难很杂 做完这个会很清楚理解递归背后的运作机制