作者oo855050 (阿伟)
看板C_and_CPP
标题[问题] 关於递回函式的一点问题
时间Fri Mar 13 23:57:31 2020
版上各位好,
小弟最近刚学C++
目前看到递回函式的地方有点小问题
递回函式的经典范例就是拿来计算阶乘
但我有一个地方有点不太懂
程式码如下 :
int factorial(int n) {
if (n == 1)
return 1;
else
return (n * factorial(n - 1));
}
在输入的n不为1的时候会一直不断地呼叫自己做计算
当n==1时停止
但当它不断呼叫自己直至n=1时不是会被return 1吗?
为何最终的答案还是阶乘正确计算的数值呢?
请教版上各位大神解答
感谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.169.148.169 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1584115053.A.D25.html
1F:推 cuteSquirrel: 1*2*3*...n-1*n 会从内而外乘回来 03/14 00:02
2F:→ cuteSquirrel: 纸上画个图,或者print执行过程 追踪一下就知道了 03/14 00:04
4F:推 chiya0219: 我写的是c 然後n<1就 return 1 想请问 我原本打成retur 03/14 01:20
5F:→ chiya0219: n 0 然後输入4的时候 一样输出会是0 这是为何 03/14 01:20
6F:→ Lipraxde: 因为 "0 * n = 0 " 啊 03/14 01:53
7F:推 LPH66: 每呼叫一次就多一层, 一个 return 只有回传一层而已 03/14 05:06
8F:推 chiya0219: 可是我n=4的时候不是应该return n*facetorial(n-1)吗 03/14 10:09
9F:→ chiya0219: 怎麽跟return0有关系 03/14 10:09
10F:推 b0920075: 阿最下层的递回不就是1*fact(0),你又写成fact(0) retu 03/14 10:20
11F:→ b0920075: rn 0,不就变成1*0,那每一层都是*0阿 03/14 10:20
12F:推 b0920075: 而且0!也会是1,这个从最根本的地方就错了吧 03/14 10:23
13F:推 CoNsTaR: 你一年的最後一小时赚 500 块你年薪就 500 吗 XD 03/14 14:32
14F:→ oo855050: pool大网址里的解释这样我就懂了!感谢!! 03/14 21:59
15F:→ oo855050: 这边感谢大家的回覆^_^ 03/14 22:00
16F:推 LPH66: 於是这里再来推广观念: 递回就是数学归纳法 03/14 22:31
17F:→ LPH66: fact(0) return 0 的问题就是基础状况不一样所以结果不一样 03/14 22:31
18F:→ fragmentwing: 查一下阿卡曼方程 实做上不会很难很杂 做完这个会很 03/31 15:33
19F:→ fragmentwing: 清楚理解递归背後的运作机制 03/31 15:33