这道题以前也看到过,但是没有写出来,我刚开始以为用循环遍历一边就可以了,结果我错了,没想到是用的斐波拉契推出来的,用的是递推的思想。
站在楼梯的第n级想一下,前一步是从哪里来的,问题就清楚了。
由于每次只能上一级或两级,那么f(n)=f(n-2)+f(n-1)。这不就是一个菲波拉契数列吗?就是一个递推问题?
开始时候是站在第1级台阶上,所以数列的开始几项会有所不同。
f(1)=0,因为开始就站在第1级台阶上;
f(2)=1,只能从第1级台阶上1级;
f(3)=2,只能从第1级台阶上2级,或只能从第2级台阶上1级;
f(n)=f(n-2)+f(n-1),n>3。
要先打个表,不然会爆的
#include<stdio.h>
int f[55];
void solve()
{
f[0]=1;
f[1]=1;
f[2]=1;
for(int i=3;i<=51;i++)
f[i]=f[i-1]+f[i-2];
}
int main()
{
int n;
int T;
solve();
scanf("%d",&T);
while(T--){
scanf("%d",&n);
printf("%d
",f[n]);
}
return 0;
}