c - 双尾递归需要解释

标签 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(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

关于c - 双尾递归需要解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27899370/

相关文章:

java - 返回 HashSet 中对象的连接某些字段的字符串

c - 将结构对象数组写入文件并读取它

c - 将字符追加到字符末尾

javascript - 递归实现函数reduce javascript

python - 最大递归深度误差,与列表理解符号有某种关系

javascript - JS新手: How to properly call a recursive function in an HTML document?

返回值时 C 代码中的混淆

c++ - 在函数中返回数组

c - 将 arr[ ] 和 *arr 作为函数原型(prototype)中的参数在所有意义上都等效吗?

c - C11 中的后缀和前缀递增和递减表达式是左值吗?