栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2.数据结构与算法:斐波那契算法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2.数据结构与算法:斐波那契算法

1.介绍斐波那契数列:
描述:斐波那契数列(Fibonacci sequence),指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n ≥ 2,n ∈ N*)

总之,就是从第三个数开始,接下来的每个数,都是前两个数的相加之和;

2.下面是斐波那契算法的代码演示:

在这里插入代码片:
#include
using namespace std;

int Fibonacci(int i)
{
   if(i==0)
   {
     return 0;
   }
   else if(i==1)
   {
    return 1;
   }
   else
   {
    return Fibonacci(i-1)+Fibonacci(i-2);
   }
}

void main()
{
	int i,n;
	cout<<"请输i的值:"<>i;
	n=Fibonacci(i);
	cout << "输出前几项之和为"< 


3.流程图分析斐波那契算法:

从这里我们可以看出,斐波那契的算法中会有较多的重复性运算,使时间复杂度大大增加了,大家可以看一下流程图,这里只用fib(5),就把简单的运算大大增加了,如果我们把所需要求得数字增加,那运算得时间就会大大增加,所以我们可以推出斐波那契的时间复杂度为:
递归算法:T(n)=O(2^n);
4.下面用简单的循环算法与递归算法,解斐波那契作比较:

在这里插入代码片:
#include
using namespace std;

int fib(int n)
{
  if(n==0)
  {
    return 0;
  }
  if(n==1)
  {
	return 1;
  }
  int first=0;   //第一个值
  int second=1;  //第二个值
  int sum;
  if(n>=2)
  {
	  for(int i=2; i<=n; i++)  //在循环时间内的计算为:(2n-1)*5+1
	  {                         //所以时间复杂度估算为:T(n)=O(n)
	    sum=first+second;  //将计算的值得出
		  first=second;      //将计算后的值往后覆盖
		  second=sum;
	  }   
     return sum;  
  }

}

void main()
{
  int n,sum;
  cout << "请输入所需要输入的值" << endl;
  cin >> n;
  sum = fib(n);
  cout << "计算求和的值为:"< 

在这里用循环,时间复杂度是大大减小的,也减少了重复的计算,通过估算的时间,用循环计算斐波那契的时间复杂度为:循环算法:T(n)=O(n);
相同的结果,可以很好的知道哪个方法更好;
在算法中,时间复杂度是越少越好,所以这里用循环解斐波那契会更好:
T(n)=O(n) < T(n)=O(2^n);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/291574.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号