走台阶问题运用递推和斐波那契数列C/C++源码实现
2014-08-08 14:33
676 查看
<pre name="code" class="cpp">/* 题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少种跳法。 */ #include<iostream> #include<cmath> using namespace std; //计算台阶数函数的原型声明 int WalkSteps(int n); int Fibnacci(int n); void main() { int n; while (1) { cout<<"请输入需要行走的台阶级数:"<<" "; cin>>n; cout<<"总共的跳法种数: "<<WalkSteps(n)<<endl; cout<<"采用斐波那契数列通项公式所得结果为:"<<Fibnacci(n)<<endl; } } //普通递推算法 int WalkSteps(int n) { if (n==0||n==1) return 1; else return WalkSteps(n-1)+WalkSteps(n-2); } //斐波那契数列通项公式 int Fibnacci(int n) { double pTemp, mTemp; pTemp = pow((1.0+sqrt(5.0))/2.0, n+1); mTemp = pow(((1.0-sqrt(5.0))/2.0), n+1); return (sqrt(5.0)/5.0)*(pTemp-mTemp); }
对于斐波那契数列:
斐波那契数列指的是这样一个数列 0,
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
特别指出:第0项是0,第1项是第一个1。
斐波那契数列通项公式直接计算:F(n)=(√5/5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}
使用通项公式进行计算时,我们要充分考虑对应关系,从斐波那契通项公式我们可以看出,当n = 1,n = 2 时,F(1) = F(2) = 1;对应台阶数为0和1的情况,即 f(0) = f(1) = 1 。经过编程验证,没有所谓的误差存在。
实验结果:
相关文章推荐
- 牛客网台阶问题源码实现 动态规划
- 约瑟夫环问题(运用递推)
- c++实现0-1背包问题完整源码(动态…
- 关于Javascript setTimeout中的this问题,以及倒计时器的实现源码
- Python实现N阶台阶的走法问题
- Python实现N阶台阶的走法问题
- 贪心算法运用于背包问题(C++实现)
- Python实现N阶台阶的走法问题
- JAV实现跳台阶问题(《剑指offer》)
- 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
- Python实现N阶台阶的走法问题
- c++实现0-1背包问题完整源码续(动态规划+回溯法实现)
- 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
- 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
- JAVA实现变态跳台阶问题(《剑指offer》)
- c++实现0-1背包问题完整源码(动态规划实现)
- 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
- 【cs229-Lecture2】Gradient Descent 最小二乘回归问题解析表达式推导过程及实现源码(无需迭代)
- 关于集合的源码实现问题——ArrayList
- Python实现N阶台阶的走法问题