走台阶问题运用递推和斐波那契数列C/C++源码实现

来源:互联网 发布:sql identity属性 编辑:程序博客网 时间:2024/05/21 01:56
<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;elsereturn 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 。经过编程验证,没有所谓的误差存在。


实验结果:





0 0