说是超级楼梯,其实这个题可以有很多的变法,但是都是换汤不换药。
首先,规定一开始的时候在第一个台阶,其实就是暗含了如果是输入的台阶数是1的时候有0种走法,而当是1的时候,又规定每次走的台阶数都是1或2,所以只有一种走法,而当有个台阶的时候,走法就会有1-1-1和1-2两种,走法,而当是4的时候,则有1-1-2,1-1-1-1和1-2-1三种,而当是5的时候,则有1-1-1-2,1-1-1-1-1,1-2-1-1,1-1-2-1和1-2-2五种,根据这个规律容易得出当台阶数大于3时,走的方法都是前两个之和,由此得出递推公式f(n)=f(n-1)+f(n-2)
下面是代码
#include<iostream>
#include<cstdlib>
using namespace std;
int zoufa(int x)
{
if(x<=3)
return x-1;
else
return zoufa(x-1)+zoufa(x-2);
}
int main()
{
int n;
cin>>n;
int i;
int a[1000];
for(i=0;i<n;i++)
{
cin>>a[i];
}
for(i=0;i<n;i++)
{
int m=0;
m=zoufa(a[i]);
cout<<m<<endl;
}
return 0;
}
/*
(使用二叉树的方法)开始在第一个台阶
之后每一次可以走一个台阶或两个台阶
可以使用树
左边的是一个台阶
右边的是两个台阶
所有台阶之后等于台阶总数时t++
*/