跳台阶问题
来源:互联网 发布:unity3d 路径动画 编辑:程序博客网 时间:2024/06/05 05:28
【题 目】一个台阶一共有n阶,一次起跳可以跳一阶,也可以跳二阶。问总共有多少中跳法,并对时间复杂度进行分析。
【思 路】如果只有一阶,那么只有一种跳法;如果有2阶,那么有2中跳法(跳1阶再跳1阶,一次跳2阶);那么如果有n阶呢?假设对于n阶的阶梯,我们有f(n)种跳法;那么n阶时,我们考虑如果第一次跳共有两种选择:第一次跳了1阶,剩下n-1阶有f(n-1)种跳法;第一次跳了2阶,剩下的n-2阶有f(n-2)种跳法,那么总共的跳法数就是f(n-1)+f(n-2)。到这里我们可以看出这就是斐波那契数列的递归公式,只是前两项稍有区别,写成数学表达式如下:
【代 码】
代码1(递归,指数级):
#include<iostream>
#include<string>
using namespace std;
int Fibonacci( int n)
{
if(n == 0)
return 0;
else if(n == 1)
return 1;
else
return Fibonacci(n-1) + Fibonacci(n-2);
}
int main()
{
cout<<"Enter An N:"<<endl;
int number=0;
cin>>number;
cout<<Fibonacci(number)<<endl;
return 0;
}
代码2(非递归,O(n)):
#include<iostream>
#include<string>
using namespace std;
int Fibonacci(int n)
{
if(n == 0)
return 0;
if(n == 1)
return 1;
int firstItem = 0;
int secondItem = 1;
int fib = 0;
int cnt = 1;
while(cnt < n)
{
fib = firstItem + secondItem;
firstItem = secondItem;
secondItem = fib;
++cnt;
}
return fib;
}
int main()
{
cout<<"Enter A Number:"<<endl;
int number;
cin>>number;
cout<<Fibonacci(number)<<endl;
return 0;
}
- 跳台阶问题(变态跳台阶)
- 跳台阶问题(变态跳台阶)
- 跳台阶与变态跳台阶问题
- 青蛙跳台阶,变态跳台阶问题
- 跳台阶问题(变态跳台阶)
- 跳台阶问题(变态跳台阶)
- 跳台阶以及变态跳台阶问题
- 青蛙跳台阶/变态跳台阶问题
- 跳台阶问题--总结
- 27.跳台阶问题
- 青蛙跳台阶问题
- 27、跳台阶问题
- 跳台阶问题
- 跳台阶问题
- 27.跳台阶问题
- 跳台阶问题
- 跳台阶问题
- 跳台阶问题
- 我们的智慧型生活离我们还有多远
- java集合之EnumSet
- Android开发相关的Blog推荐
- Java学习笔记(九)图形界面
- 记录VC 6.0操作Excel记录
- 跳台阶问题
- Leetcode NO.102 Binary Tree Level Order Traversal
- 【笨木头Unity】入门之旅007:Demo之四处找死(二)_主角移动和旋转
- cpu是怎样工作的?
- java Web相关的知识技能
- Java学习笔记(十)观察者模式及适配器模式
- swift 快速奔跑的兔几 本节的内容是:SceneKit 约束
- Android 实战 - 个人APP乐逗项目(内部音乐播放器实现,开源MaskProgressView使用)
- JAVA WEB POI Excel导出导入