递归再认识
约 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 的阶乘,边界是什么?
登录 后可看答案