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
对我来说,递归是如何起作用的。如果按照说明完成对函数的调用,那么对我来说非常清楚,但不是之前!
对于为什么这个节目在这里向上计算,我感到非常困惑。如果有人能向我解释这个程序的机制,那将非常感激。
答案 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,
...
等等。