【发布时间】:2022-01-23 15:37:07
【问题描述】:
我正在学习递归的概念,为了实践我的知识,我编写了以下程序。
#include <bits/stdc++.h>
using namespace std;
int c = 0;
int add(int a) {
if (a == 0) {
return c;
}
c = c + 1;
add(a - 1);
cout << "Hello";
}
int main() {
int x = add(6);
cout << "Final " << x;
}
它产生了这个输出,这不是我所期望的:
HelloHelloHelloHelloHelloHelloFinal 5134464
为什么当a==0条件满足时程序没有终止,而是将最终结果返回给主函数?
不是那样,而是打印"Hello" 6 次,但输出语句在递归调用之后。
为什么递归调用后的代码还是会执行多次?
我预计它永远不会被执行。
我仍在尝试了解递归的工作原理,所以我想知道这里到底发生了什么。
【问题讨论】:
-
return 表示只从当前函数调用返回,而不是从整个递归堆栈返回。
-
结果必须是什么?
-
除了 a 为 0 的情况外,您不会返回任何值。尝试将 add(a-1) 放在末尾并添加这样的返回语句
cout…; return add(a-1) -
你正在返回
c,但你没有保存它 -
严格来说,您的代码可以打印任何输出,因为不从
add返回值会调用未定义的行为。编译器对此发出警告:godbolt.org/z/81xfPdjdc