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<iostream>
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的值:"<<endl;cin>>i;n=Fibonacci(i);cout << "输出前几项之和为"<<n<<endl;}
3.流程图分析斐波那契算法:
从这里我们可以看出,斐波那契的算法中会有较多的重复性运算,使时间复杂度大大增加了,大家可以看一下流程图,这里只用fib(5),就把简单的运算大大增加了,如果我们把所需要求得数字增加,那运算得时间就会大大增加,所以我们可以推出斐波那契的时间复杂度为:
递归算法:T(n)=O(2^n);
4.下面用简单的循环算法与递归算法,解斐波那契作比较:
在这里插入代码片:
#include<iostream>
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 << "计算求和的值为:"<<sum << endl;}
在这里用循环,时间复杂度是大大减小的,也减少了重复的计算,通过估算的时间,用循环计算斐波那契的时间复杂度为:循环算法:T(n)=O(n);
相同的结果,可以很好的知道哪个方法更好;
在算法中,时间复杂度是越少越好,所以这里用循环解斐波那契会更好:
T(n)=O(n) < T(n)=O(2^n);
2.数据结构与算法:斐波那契算法相关推荐
- Interview:算法岗位面试—上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点—斐波那契数列、八皇后问题、两种LCS问题
ML岗位面试:上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点-斐波那契数列.八皇后问题.两种LCS问题 Interview:算法岗位面试-上海某公司算法岗位(偏机器学 ...
- Java数据结构与算法---斐波那契数列Fibonacci
Java数据结构与算法-斐波那契数列Fibonacci 原理都很简单,直接上代码: package cn.m_fibonacci;public class Fibonacci {public stat ...
- 斐波那契算法举例(iterative Fibonacci algorithm)
// count_change.cpp : Defines the entry point for the console application. // #include "stdafx. ...
- 斐波那契算法详解(logn)
** 斐波那契算法详解 ** ** 1.斐波那契数列的一般解法: for循环强行计算 ** #include <stdio.h> int main() { int n ; int fn = ...
- 数据结构与算法 | 斐波那契查找
要想能够理解这一算法,需要先了解 1.二分查找 https://blog.csdn.net/qq_35423154/article/details/101383518 2.斐波那契数 https:// ...
- 最优化算法-斐波那契数列搜索
斐波那契数列搜索,参考Edwin<最优化导论>第四版7.3章节,算法采用go语言实现. /****************************************** FileNa ...
- 算法---斐波那契思想
1.主要框架:f(n)=f(n-1)+f(n-2) 用不同的方法求解斐波那契数列的时间效率大不相同.第一种基于递归的解法虽然直观但时间效率很低,在实际软件开发中不会用这种方法,也不可能得到面试官的青睐 ...
- 将真分数分解为埃及分数(斐波那契算法步骤)Java
package com.patience.interview.huawei;import java.util.Scanner;/*** 将真分数分解为埃及分数* @author Green.Gee* ...
- 427-动态规划算法-斐波那契数列
动态规划算法求解斐波那契数列 状态:dp数组,存储已经求解的子问题的最优解 递归版本的动态规划算法 //参数n表示斐波那契数列中数字的个数. //返回相应个数的斐波那契数列数字的值. int fabn ...
最新文章
- java字符串 直接能网络传输吗_atitit.二进制数据无损转字符串网络传输
- java gmail smtp_通过JAVA中的Gmail SMTP服务器发送电子邮件
- 优秀的PHP程序员至少应该了解PHP代码的优缺点(转)
- zeroc ice php,ZeroC ICE+PHP整合
- cocos2dx3.2文件结构和代码结构
- 阿里开源框架-2018年末
- [UE4] 通过 Git 进行版本控制时的报错 No assets to check in! 的解决方法:重新更改本地代码
- [OSX安装教程] [整理]虚拟机VM安装Mac OS X
- Spring之JDBC模板jdbcTemplate
- 论文赏析[COLING18]两种成分句法分析的局部特征模型
- (转)常见的用户密码加密方式以及破解方法
- Hadoop学习笔记三
- 解决g2o无法编译出g2o_viewer的问题
- springboot企业级进销存管理系统
- 童年的李子明都长大了,你还会去买一罐旺仔牛奶吗?
- Windows 7 64位版本的内存错误导致蓝屏死机(Blue Screen to Death)
- ps扁平图之 油画(莫奈)中的色彩与几何
- 解决Mac book pro (M1芯片)电脑打开idea卡顿,cpu飙升的问题。
- 工程院院士李德毅:汽车正在被软件所改变
- 【LOJ #6617】「THUPC 2019」摆家具 / furniture(DP / BSGS / 矩阵快速幂)