有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
2 2 3
1 2
逆向思维:当你最后一步要到大第M层楼梯的时候,有两种走法,从M-1走一阶到达,从M-2走两阶到达,所以总的就是走到M-1层的方法数加上走到M-2层的方法数,同样道理,走到M-1和M-2也是一样,是由之前的层数方法得来的,由此得到斐波那契数列
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <stdlib.h>
using namespace std;
const int maxn = 41;
int main()
{
int n,m;
cin >> n;
int f[maxn];
f[1]= 0,f[2] = 1,f[3] = 2;
for(int i = 4;i <= maxn;i++)
f[i] = f[i-1]+f[i-2];
while(n--)
{
cin >> m;
cout << f[m] << endl;
}
return 0;
}