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



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));
}
}

+运算符的左侧和右侧之间没有排序。因此,首先评估哪一个是未知的(留给编译器(。

弄清楚它的唯一方法是在调试器中逐行、逐语句、逐个表达式地进行编码。

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

我们可以简单地绘制一个二叉树来知道答案,而无需编译它。只需开始将分支分成两个计数(n-1(和计数(n-2(,然后添加所有树叶。 就像如果我们把 n 作为 4,它将被拆分为 3 和 2,这将是 4 的两个分支。类似地,递归地将节点分解为分支。3 将拆分为 1 和 2,依此类推。直到叶子节点小于 0。最后,添加所有叶子的价值以获得答案。

最新更新