递归再认识

8 分钟

递归就像俄罗斯套娃:打开一个大娃娃,里面是个一模一样但更小的娃娃,一直打开到最小的那个为止。函数自己调用自己,就是把一个大问题交给“更小的同一个问题”去解决。最关键的是那个“最小娃娃”——边界条件,到了它就直接给答案,不再往下调,否则会无限套下去。

#include <iostream>
using namespace std;
int fac(int n) {
    if (n == 0) return 1;   // 边界:0 的阶乘是 1
    return n * fac(n - 1);  // 大问题交给小问题
}
int main() {
    cout << fac(5) << endl; // 输出 120
    return 0;
}

新手最容易漏掉边界条件,程序就会一直往下调用直到崩溃(栈溢出)。写递归先写边界,再写“大问题怎么变小问题”的那一句。

小纸条

求 n 的阶乘,边界是什么?

登录 后可看答案

递归再认识 · C++ 入门 · op599 课程