C 双尾递归需要解释
我被两个C 双尾递归需要解释,c,recursion,return,return-value,C,Recursion,Return,Return Value,我被两个return语句困在这个递归中。有人能一步一步地告诉我结果吗 caos(9); int caos( int n ) { if (n < 4) { return n; } else return caos(n-2) + caos(n-4); } caos(9); 内部caos(内部n){ if(n
return
语句困在这个递归中。有人能一步一步地告诉我结果吗
caos(9);
int caos( int n ) {
if (n < 4) {
return n;
} else return caos(n-2) + caos(n-4);
}
caos(9);
内部caos(内部n){
if(n<4){
返回n;
}否则返回caos(n-2)+caos(n-4);
}
我认为,您首先需要了解的是return
语句
参考C99标准文件第6.8.6.4章第3段
如果执行带有表达式的return语句,则表达式的值将作为函数调用表达式的值返回给调用方
因此,当返回caos(n-2)+caos(n-4)时当遇到code>语句时,caos()
将被调用[再次,这是递归],其参数值为n-2
和n-4
现在,对于caos()
函数本身
- 如果
n
值为<4
,它将执行返回4
- 否则执行
返回caos(n-2)+caos(n-4)代码>
上文解释了后者的效果。希望这有帮助 在我的评论之后,我不会给你一个完整的解决方案,但我会尽力帮助你做一些你可以开始做的事情
让我们看一下caos(9)
:
caos(9)9<4?不
/ \
/ \
7 < 4? 没有caos(7)caos(5)5<4?不
/ \ / \
/ \ / \
5 < 4? 无CAO(5)CAO(3)CAO(3)CAO(1)
/ \ ↑ ↑ ↑
.. .. 所有人都<4,我们上去吧!
记住停止条件。它返回n
拿一支铅笔和一张纸,画东西,你就会得到它。
caos(9) 9 < 4? no
/ \
/ \
7 < 4? no caos(7) caos(5) 5 < 4? no
/ \ / \
/ \ / \
5 < 4? no caos(5) caos(3) caos(3) caos(1)
/ \ ↑ ↑ ↑
.. .. all are < 4, let's go up!
remember the stop condition. It returns n