行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));
}
}
答案 0 :(得分:6)
+
运算符的左侧和右侧之间没有sequencing。那么首先评估哪一个是未知的(留给编译器)。
解决问题的唯一方法是逐步思考他逐行编码,逐个语句,在调试器中用表达式表达。
但是,由于每个递归调用都不依赖于任何副作用,因此它们可以彼此独立地执行,因此顺序无关紧要,因为结果将始终相同。
答案 1 :(得分:0)
我们可以简单地绘制二叉树来知道答案,而无需编译。只需将count(n-1)和count(n-2)的分支分成两部分,然后添加所有树的叶子即可。 就像我们将n取为4一样,它将被拆分为3和2,这将是4的两个分支。类似地,递归地将节点分解为分支。 3将被分为1和2,依此类推。直到叶子节点小于零为止。最后,将所有叶子的值相加以获得答案。