我在两次return
语句中遇到了这个递归。有人可以一步一步地给我结果吗?
caos(9);
int caos( int n ) {
if (n < 4) {
return n;
} else return caos(n-2) + caos(n-4);
}
答案 0 :(得分:2)
根据我的评论,我不会给你一个完整的解决方案,但我会尝试用你可以开始的东西来帮助你。
让我们来caos(9)
:
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
答案 1 :(得分:1)
我认为,首先需要了解的是return
声明。
作为参考,来自C99标准文件,第6.8.6.4章,第3段,
如果执行带有表达式的return语句,则表达式的值将作为函数调用表达式的值返回给调用者。
因此,当遇到return caos(n-2) + caos(n-4);
语句时,caos()
将被调用[再次,这是递归],其值为n-2
和n-4
作为参数。< / p>
现在,对于caos()
函数本身,
n
值为< 4
,则会执行return 4
return caos(n-2) + caos(n-4);
以上解释了后者的效果。希望这可以帮助。