本题需要注意的是题目问的是什么?问的不是能走多少次,而是有多少种走法能到最后一个台阶。
//方法一:非递归
//首先从第一个台阶开始想,第一个台阶有一种方法,第二个台阶有两种方法,要想达到第三个台阶
//需要经过前两步,第三步的办法等于前两步之和,以此类推,可以得到a[i]=a[i-1]+a[i-2]
#include<stdio.h>//排列组合问题,也存在斐波那切思想,本题是不是有点递归的思想在里面
int main()
{
int n=0;
scanf("%d",&n);
int a[30]={0};
int i=0;
a[0]=1;
a[1]=2;
for(i=2;i<n;i++)
{
a[i]=a[i-1]+a[i-2];
}
printf("%d",a[n-1]);
return 0;
}
//方法二:递归法---就是青蛙跳台阶问题
//其实代码是没有问题的,在自己的编译器上选择小数据测试是完全符合的,但是不能在牛客网上面通过,
//是因为进行了很多重复的计算,超过了内存的限制,这道题可以作为一道很经典的递归题目去讲解递归这个知识点
//但是在实际运用当中,这样做内存消耗就太大了
// #include<stdio.h>
// int jumpfloor(int n)
// {
// //找边界
// if (n == 1)
// {
// return 1;
// }
// if (n == 2)
// {
// return 2;
// }
// //找重复
// return jumpfloor(n - 1) + jumpfloor(n - 2);
// }
// int main()
// {
// int n = 0;
// scanf("%n", &n);
// printf("%d\n", jumpfloor(n));
// return 0;
// }
```