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

<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 。经过编程验证,没有所谓的误差存在。


实验结果:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值