我刚刚发现了几分钟左右的递归函数。我正在玩它们,现在我从以下功能获得不同的输出:
int function(int m) {
m = 2*m;
std::cout<<"In f m = "<<m<<std::endl;
if(m > 20)
{
return m;
}
function(m);
};
int function2(int n) {
n = 2*n;
std::cout<<"In f2 n = "<<n<<std::endl;
if(n < 20)
{
function2(n);
}
return n;
};
int main() {
int a = 2;
std::cout <<"function(a) = "<<function(a)<<std::endl;
std::cout <<"function2(a) = "<<function2(a);
return 1;
}
对此我得到输出:
在f m = 4中 在f m = 8中 在f m = 16中 在f m = 32
功能(a)= 32
在f2 n = 4
在f2 n = 8
在f2 n = 16
在f2 n = 32
function2(a)= 4
它们不应该产生32
的结果吗?
答案 0 :(得分:3)
因为您只执行return n
并且不从递归调用中分配它,所以第一次调用它将始终为4
。
你应该例如。
if(n < 20)
n = function2(n);
return n;
答案 1 :(得分:0)
实际上在function2中,无论n是否小于或大于20,语句return n
都会
总是被执行,因为if语句不会返回。所以当你在function2中传递参数a = 2时,它将返回4.如果你想要它们都返回相同的结果。
你可以像
if(n < 20)
{
function2(n);
}
else
return n;