递归函数的不同输出

时间:2013-06-30 07:44:17

标签: c++ function recursion

我刚刚发现了几分钟左右的递归函数。我正在玩它们,现在我从以下功能获得不同的输出:

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的结果吗?

2 个答案:

答案 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.如果你想要它们都返回相同的结果。 你可以像

一样修改function2
if(n < 20)
{
    function2(n);
}
else
    return n;