0

大约几分钟前,我刚刚发现了递归函数。我一直在玩它们,现在我从以下函数中获得了不同的输出:

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

为此,我得到输出:

In fm = 4
In fm = 8
In fm = 16
In fm = 32
function(a) = 32
In f2 n = 4
In f2 n = 8
In f2 n = 16
In f2 n = 32
function2(a) = 4

他们不应该都产生结果32吗?

4

2 回答 2

3

因为您只return n从递归调用中分配它并且不分配它,所以第一次调用它总是4.

你应该例如

if(n < 20)
    n = function2(n);
return n;
于 2013-06-30T07:46:21.060 回答
0

实际上在function2中,无论n是否小于或大于20,语句return n都会被执行,因为if语句不会返回。所以当你在function2中传递参数a = 2时,它会返回4。如果你想要两者他们返回相同的结果。你可以像这样修改function2

if(n < 20)
{
    function2(n);
}
else
    return n;
于 2013-06-30T08:00:24.497 回答