您的位置:首页 > 编程语言 > C语言/C++

走台阶问题运用递推和斐波那契数列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 。经过编程验证,没有所谓的误差存在。

实验结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: