调用自身的函数称为递归函数。而这种技术称为递归。
C++ 递归的工作原理
void recurse()
{
... .. ...
recurse();
... .. ...
}
int main()
{
... .. ...
recurse();
... .. ...
}
下图显示了递归如何通过反复调用自身来工作。

递归将继续进行,直到满足某个条件。
为了防止无限递归,可以使用 if...else 语句 (或类似方法),其中一个分支进行递归调用,而另一个分支不进行。
示例 1:使用递归计算数字的阶乘
// Factorial of n = 1*2*3*...*n
#include <iostream>
using namespace std;
int factorial(int);
int main() {
int n, result;
cout << "Enter a non-negative number: ";
cin >> n;
result = factorial(n);
cout << "Factorial of " << n << " = " << result;
return 0;
}
int factorial(int n) {
if (n > 1) {
return n * factorial(n - 1);
} else {
return 1;
}
}
输出
Enter a non-negative number: 4 Factorial of 4 = 24
阶乘程序的工作原理

正如我们所见,factorial()
函数正在调用自身。但是,在每次调用中,我们将 n 的值减少了 1
。当 n 小于 1
时,factorial()
函数最终会返回输出。
递归的优点和缺点
以下是使用 C++ 递归的优缺点。
C++ 递归的优点
- 它使我们的代码更短、更简洁。
- 递归在涉及数据结构和高级算法(如图和树遍历)的问题中是必需的。
C++ 递归的缺点
- 与迭代程序相比,它占用了大量的堆栈空间。
- 它使用更多的处理器时间。
- 与等效的迭代程序相比,它可能更难调试。
另请阅读