-3

What is wrong with this code? This is a simplified version of what I'm doing. It's a recursive function calls on the same variable.

#include <iostream>

using namespace std;
void Foo(int& x)
{
    x++;
    Foo(x);
    cout<<x<<"\n";
    if(x==10)
        return;
}

int main()
{
    int x=0;
    Foo(x);
    return 0;
}
4

3 回答 3

3

这个函数没有终止条件,它只是无条件地调用自己,试图建立一个无限递归:

void Foo(int& x)
{
    x++;
    Foo(x); // <==== UNCONDITIONALLY RECURSIVE
    cout<<x<<"\n";
    if(x==10)
        return;
}

由于每个函数调用的堆栈帧都会占用一些内存空间,因此不可能进行无限递归:迟早,您的堆栈将超出其限制大小,并且您的程序将被迫终止。

于 2013-03-03T22:59:52.037 回答
3
x++;
Foo(x);
cout<<x<<"\n";
if(x==10)
    return;

问题是这会导致无限递归。您仅在函数调用自身if (x == 10) 检查,因此它不可能到达返回条件。通过编写解决此问题

x++;
if(x==10)
    return;

Foo(x);
cout<<x<<"\n";
于 2013-03-03T23:00:53.133 回答
1

你有一个无限递归。它将继续创建堆栈帧,直到堆栈空间耗尽。在递归调用之前,您需要一个出口警卫:

void Foo(int& x)
{
    cout<<x<<"\n";
    if(x==10)
        return;
    x++;
    Foo(x);
}
于 2013-03-03T23:02:50.857 回答