(2)斐波那契数列及其应用跳台阶问题

本文探讨了斐波那契数列的两种实现方式:递归与循环,并对比了它们的时间复杂度。此外,还通过跳台阶问题展示了斐波那契数列的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

斐波那契公式:


递归实现:

输入参数n类型:unsigned int

函数体:

if : n  == 0 -->返回 0

if : n  == 1 -->返回1

if : n >= 2 --> 返回function(n - 1) + function(n - 2)

分析:随着n 的增大,重复计算同一个数的次数明显增多,例如求f(9)会用到f(6);求f(8) 和f(7) 同样会用到f(6);

           故随着n的增大 ,递归所用资源急剧上升;

           时间复杂度随着n 的增大呈现指数级增长;


循环实现:

当 (n >= 2)时,Fibonacci(2) = Fibonacci(0) + Fibonacci(1);

                         Fibonacci(3) = Fibonacci(1) + Fibonacci(2);

                         .....................................................................

                         Fibonacci(n) = Fibonacci(n-1) + Fibonacci(n-2);

故求f(n)时,只需要知道f(n-1),f(n-2)即可;

时间复杂度O(n);


代码实现:

#include<iostream>
using namespace std;

//----------------------------------------递归实现----------------------------------------------
long long   Fibonacci1(unsigned int n)
{
	if(n < 2)
		return n;
	else
		return  Fibonacci1(n - 1) + Fibonacci1(n - 2);
}

//--------------------------------------循环实现---------------------------------------------------
long long  Fibonacci2(unsigned int n)
{	
	if(n < 2) 
		return n;

	long long  FeiOne = 0;
	long long  FeiTwo = 1;
	long long  FeiN = 0;
	for(unsigned  i = 2; i <= n; ++i)
	{
		FeiN = FeiOne + FeiTwo;
		
		FeiOne = FeiTwo;
		FeiTwo = FeiN;
	}

	return FeiN;
}
int main()
{
	unsigned int n;
	cout<<"请输入一个正整数:";
	cin>>n;
	cout<<n<<'\n';
	
	cout<<"斐波那契数列Fei1()为:"<<Fibonacci1(n)<<'\n';
	cout<<"斐波那契数列Fei2()为:"<<Fibonacci2(n)<<endl;

	return 0;
}


跳台阶问题:

问题描述:一只青蛙一次可以跳上一级台阶,也可以跳上2级台阶;求该青蛙跳上一个n阶的台阶,总共有多少跳法?


分析:n =1-->直接跳上,跳法为1;

           n = 2-->先跳台阶1,再跳台阶2;或者直接跳上台阶2;跳法总共有2种;

           n > 2时;(1)若青蛙从台阶n-1,直接跳到台阶n;则跳法总数F(n) = F(n - 1)

                             (2)若青蛙从台阶n-2,直接跳到台阶n;则跳法总数F(n) = F(n - 2)

                             故:F(n) = F(n - 1) + F( n - 2);

发现其实是斐波那契数列的应用;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值