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)时语句时,
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