题目描述

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
做题链接:力扣–斐波那契数

1.法一:迭代

class Solution {public:int fib(int n) {//1.迭代if(n==0){return 0;}if(n==1){return 1;}int first=1;int second=1;int third=1;n-=2;//按推算,n>2时,需要迭代n-2次得到第n个斐波那契数while(n){third=(first+second)%(int)(1e9+7);//这里要注意取模,题目有提示first=second;second=third;n--;}return third;}
};

2. 法二:递归(简单版)

这个答案在牛客上可以通过,但是在力扣上过不了,当要求的第n个斐波那契数,n很大时,会超时。原因是因为在递归时计算了很多重复的值,比如计算fib(6)时,需要计算f(5)和f(4),而计算f(5)时又要计算f(4),所以时间消耗比较大。

class Solution {public:int fib(int n) {//分治,递归if(n==0){return 0;}if((n==1)||(n==2)){return 1;}return fib(n-1)+fib(n-2);}
};

3.法三 递归(高效版)

使用容器map,首先查看需要的对应斐波那契数是否在map中,若有则直接拿出来使用,若没有再递归计算,同时插入map中,方便下一次使用。

class Solution {private:unordered_map<int,int> filter;
public:int fib(int n) {//分治,递归if(n==0||n==1){return n;}//找第n-1项数列值int pre=0;if(filter.find(n-1)==filter.end())//没找到{pre=fib(n-1);filter.insert({n-1,pre});}else//找到了{pre=filter[n-1];}//找第n-2项数列值int ppre=0;if(filter.find(n-2)==filter.end()){ppre=fib(n-2);filter.insert({n-2,ppre});}else{ppre=filter[n-2];}return (pre+ppre)%(int)(1e9+7);}
};

C++实现斐波那契的三种方法相关推荐

  1. 实现斐波拉契的三种方法

    实现斐波拉契的三种方法: 方法一:递归方法 def fib_1(index):if index <= 2:return 1else:return fib_1(index-1) + fib_1(i ...

  2. 斐波那契数列三种方法计算,光棍节快乐

    //斐波那契数列三种方法计算 //Fibnacci(0)=0 //Fibnacci(1)=1 //Fibnacci(n)=Fibnacci(n-1)+Fibnacci(n-2)  [n>1] / ...

  3. 斐波那契数列三种实现+矩阵乘法+矩阵cimi

    package com.lyk.kk;/** * Created by Administrator on 2017/9/4. */ public class A1 {//矩阵乘法 public int ...

  4. python3实现斐波那契数列--4种方法

    基础版(list方法) # 比较占内存 w = int(input("输入一个数字还你一个斐波那契数列:")) list_res = [] def list_n(n):if n&g ...

  5. Python 求解斐波那切(三种方法)

    普通递归版 def fib(n):return fib(n-1)+fib(n-2) if n >= 2 else n 迭代版 def fib(n):if n < 2:return na, ...

  6. 求第 N 个 斐波那契数的多种方法

    斐波那契数列 是一个非常美丽.和谐的数列,也是一个黄金分割数列.符合黄金分割比0.618.有人说它起源于一对繁殖力惊人.基因非常优秀的兔子,也有人说远古时期的鹦鹉就知道这个规律.     斐波那契数列 ...

  7. 斐波那契的N种实现方式

    文章目录 前言 实现方式 迭代 动态规划 同余优化 普通递归 记忆化dfs 矩阵快速幂 通向公式 打表 END 前言 学习计算机编程的过程中必然少不了对斐波那契数列的认识和编写. 斐波那契数列 的序列 ...

  8. 斐波那契数列两种算法实现(循环,递归)

    首先是最简单的递归算法,相信很多初学者第一次接触递归这种算法都是从写一个斐波那契数列开始的. 这里除了递归算法之外我还会介绍循环算法 首先是最基础的递归算法 #include <stdio.h& ...

  9. 斐波那契序列的实现方法及对比

    #include<iostream> using namespace std; int FeiboNon(int n) // 非递归实现 {int Feif = 1;int Feis = ...

最新文章

  1. ashx和asmx的HttpContext
  2. APP技巧:微信10个实用小技巧,太实用了,赶紧收藏!
  3. 怎么赚美金_我16岁时如何赚到200,000美元
  4. macos 此服务器的证书无效_网易出现重大失误,忘记续费HTTPS证书导致大量用户受影响...
  5. 20120918-LIST类定义《数据结构与算法分析》
  6. dd命令打包多个文件_linux下如何tar打包多个并列文件夹,如:将a文件夹 b文件夹 c文件夹,打包成d.tar文件...
  7. 用matlab做bp神经网络预测,matlab人工神经网络预测
  8. 群智能算法(遗传算法, 粒子群算法, 蚁群算法原理与实例分析)
  9. linux 移动硬盘 mac,Mac下使用NTFS格式的移动硬盘
  10. 《大化传输网》学习笔记(三)————OTN系统的保护
  11. 轻松获得oblog2.52的WebShell
  12. stm8s003中串口中断问题
  13. NTL-NTL安装报错
  14. 详解 Android 系统启动流程
  15. pytorch 中pad函数toch.nn.functional.pad()的使用
  16. 解决tar: Error is not recoverable: exiting now
  17. 渗透测试-不死马的创建和查杀
  18. [日推荐] 『闲聊助手』人工智能小程序,仅此一款!-极乐商店store.dreawer.com
  19. linux nginx安装https安全证书
  20. sshpass报错Host key verification failed

热门文章

  1. python快速格式化json
  2. ps 2019安装破解以及添加CUR和ICO插件
  3. Triangle Collision(二分 平面几何)
  4. python如何期货交易_Python期货量化交易基础教程(15)
  5. ARM处理器发展历程
  6. 水平视角垂直视角概念
  7. 用原生js实现刮奖效果
  8. 四边形面积等分以及多边形面积等分的讨论
  9. “百炼成钢”的科技内蕴
  10. 程序员必备装备:开发环境硬件搭建篇(防颈椎病)