题解 | N阶楼梯上楼问题
#include<iostream>
using namespace std;
const int MAX = 100;
int f[MAX];
bool visit[MAX];
int Fib(int n) {
if (n == 1) {
return 1;
} else if (n == 2) {
return 2;
} else if (visit[n]) { // 如果已经访问过
return f[n];
} else {
f[n] = Fib(n - 1) + Fib(n - 2);
visit[n] = true;
return f[n];
}
}
int main() {
int N;
while (cin >> N) {
for (int i = 0; i < MAX; i++) { // 初始化visit数组
visit[i] = false;
}
// 获取结果
int answer = Fib(N);
cout << answer << endl;
}
}
递归+记忆化搜索也可以解决问题