正常可能会这么思考:我从第一节楼梯开始爬能有多少不能的爬法,这样会陷入无尽的循环,走入迷途。

OJ刷题:#196 爬楼梯_斐波那契


所以我们应该换一种思路,我们从终点开始,那么是怎么到达终点的呢?假设一次能爬1阶或2阶,那么到达终点的时候就有两种爬法,那在第4阶或者第3阶是怎么爬的呢?进行递归调用

f(n) = f(n-1) + f(n-2)

OJ刷题:#196 爬楼梯_c++_02

斐波那契函数!

接下来来看一下OJ题目吧

题目:

这一节我们需要讨论的是一个递推的问题。在海贼理工学院有一个路飞君,他在爬楼梯的时候从来都是要么上 2 个台阶,要么上 3 个台阶。由于爬楼梯实在太无聊了,路飞君就开始尝试每天采用不同的方式上楼梯。如果路飞君回家需要爬 N 阶台阶,你能告诉路飞君,他爬楼梯回家有多少种不同的方式吗?

​ 请注意,路飞君“先爬 3 个台阶后爬 2 个台阶”和“先爬 2 个台阶后爬 3​ 个台阶”是两种不同的回家方式。

OJ刷题:#196 爬楼梯_斐波那契_03


code:

#include <iostream>
int get(int n) {
if (n <=4) return 1;
return get(n-2)+get(n-3);
}
int main() {
int n;
std::cin >> n;
int m = get(n);
std::cout << m << std::endl;
return 0;
}