递归调用
概念: 一个函数在执行的过程中,直接或间接地调用了自身。为了避免无限循环,递归必须有一个明确的结束条件。
关键:
-
递归的终止条件 (Base Case): 这是递归函数不再调用自身的条件,是递归能够结束的根本保证。
-
递归的递推关系 (Recursive Step): 定义了如何将问题分解为更小的、与原问题结构相同的子问题。
示例代码:
#include <iostream>
// 计算阶乘
int factorial(int n) {
std::cout << "计算 " << n << " 的阶乘" << std::endl;
// 递归终止条件
if (n == 0) {
std::cout << "到达终止条件,返回 1" << std::endl;
return 1;
}
// 递归调用
int result = n * factorial(n - 1);
std::cout << n << " 的阶乘计算完成,结果为 " << result << std::endl;
return result;
}
// 使用递归计算斐波那契数列
int fibonacci(int n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main() {
int num = 5;
std::cout << num << " 的阶乘是: " << factorial(num) << std::endl;
std::cout << std::endl;
std::cout << "斐波那契数列第 10 项是: " << fibonacci(10) << std::endl;
return 0;
}