当有2个或更多递归函数写入togeather时程序是如何执行的?

时间:2017-08-22 14:12:03

标签: c++ function recursion

return((count-2)+(count-1))如何在以下cpp计划中运作? 给定代码的ans是 -18 。如何在不运行代码的情况下知道ans 和function count(n-2)count(n-1)中的哪一个首先被调用,它是如何决定的?

#include <iostream>
using namespace std;
int count(int n);
int main() {
    int n, m;
    n = 4;
    m = count(n);
    cout << m;
}

int count(int n)
{
    if (n<0)
    {
        return n;
    }
    else
    {
        return (count(n - 2) + count(n - 1));
    }
}

2 个答案:

答案 0 :(得分:6)

+运算符的左侧和右侧之间没有sequencing。那么首先评估哪一个是未知的(留给编译器)。

解决问题的唯一方法是逐步思考他逐行编码,逐个语句,在调试器中用表达式表达。

但是,由于每个递归调用都不依赖于任何副作用,因此它们可以彼此独立地执行,因此顺序无关紧要,因为结果将始终相同。

答案 1 :(得分:0)

我们可以简单地绘制二叉树来知道答案,而无需编译。只需将count(n-1)和count(n-2)的分支分成两部分,然后添加所有树的叶子即可。 就像我们将n取为4一样,它将被拆分为3和2,这将是4的两个分支。类似地,递归地将节点分解为分支。 3将被分为1和2,依此类推。直到叶子节点小于零为止。最后,将所有叶子的值相加以获得答案。