斐波那契数列是经典的递归入门题:F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2)。每项等于前两项之和,天然适合用递归来写。
但朴素递归有个大坑:重复计算。算 F(5) 时,F(3) 会被算 2 次,F(2) 会被算 3 次,指数级爆炸。考试中 n 稍大就超时。
核心易错点:①忘记写终止条件(F(0)=0, F(1)=1),导致无限递归栈溢出;②暴力递归效率太低,实际做题要用记忆化或循环。
# 输出: F(0)=0 F(1)=1 F(2)=1 F(3)=2 F(4)=3 F(5)=5 F(6)=8 F(7)=13 F(8)=21 F(9)=34 F(10)=55
int f(int n){ return n<=1?n:f(n-1)+f(n-2);} cout<#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
if (n <= 1) { cout << n; return 0; }
int a = 0, b = 1, c;
for (int i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
cout << b;
return 0;
}
n<=1,直接导致无限递归栈溢出。