如果在指令之前调用递归函数怎么办?

时间:2016-07-11 04:00:15

标签: c++ recursion

int i = 1;

void myFunction(int counter) {

    if (counter == 0) {
        return;
    } else {
        myFunction(--counter);
        cout << i << " : " << counter << endl;
        i++;
        return;
    }
}

我用

运行程序
myFunction(4)

此代码在控制台中显示以下内容:

1 : 0
2 : 1
3 : 2
4 : 3

对我来说,递归是如何起作用的。如果按照说明完成对函数的调用,那么对我来说非常清楚,但不是之前!

对于为什么这个节目在这里向上计算,我感到非常困惑。如果有人能向我解释这个程序的机制,那将非常感激。

3 个答案:

答案 0 :(得分:4)

我建议稍微简化代码以了解正在发生的事情:

void myFunction(int counter) {
    cout << "Started function with " << counter << "." << endl;
    if(counter == 0) {
        cout << "Found a 0, returning." << endl;
        return;
    } else {
        cout << "Before recursive call." << endl;
        myFunction(--counter);
        cout << "After recursive call." << endl;
    }
}

myFunction(1);

你应该看到这个输出:

Started function with 1.
Before recursive call.
Started function with 0.
Found a 0, returning.
After recursive call.

如果这对您有意义,请尝试增加您最初传入的数字,并且您应该能够拼凑原始代码中的内容。

答案 1 :(得分:2)

当您运行程序时:
myFunction(4)发生的第一件事就是调用myFunction(3)来调用myFunction(2)等等。

{
        myFunction(--counter); //Executed first
        //followed by this
        cout << i<< " : " << counter << endl;
        i++;
        return;
}

因此,myFunction(4) - &gt; myFunction(3) - &gt; myFunction(2) - &gt; myFunction(1) - &gt; cout语句myFunction(1) - &gt; cout语句myFunction(2) - &gt; cout语句myFunction(3) - &gt; myFunction(4)的cout陈述
myFunction(0)只返回,而myFunction(1)打印语句1 : 0。  然后执行myFunction(2)的代码,依此类推产生输出:

1 : 0
2 : 1
3 : 2
4 : 3

答案 2 :(得分:2)

鉴于

int main() {
    myFunction(4);
}

会发生以下情况:

myFunction(3); // with cout << i << ": " << 3 << endl; i++; waiting in the queue
myFunction(2); // with cout << i << ": " << 2 << endl; i++; waiting in the queue
myFunction(1); // with cout << i << ": " << 1 << endl; i++; waiting in the queue
myFunction(0); // with cout << i << ": " << 0 << endl; i++; waiting in the queue

由于cout << i << " : " << 0 << endl; i++;是队列中的最后一个,因此将首先执行它,打印

1: 0

在此之后,i增加1并变为2,cout << i << " : " << 1 << endl; i++;打印

2: 1

i变为3,

...

等等。