C++实现斐波那契的三种方法
题目描述
写一个函数,输入 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++实现斐波那契的三种方法相关推荐
- 实现斐波拉契的三种方法
实现斐波拉契的三种方法: 方法一:递归方法 def fib_1(index):if index <= 2:return 1else:return fib_1(index-1) + fib_1(i ...
- 斐波那契数列三种方法计算,光棍节快乐
//斐波那契数列三种方法计算 //Fibnacci(0)=0 //Fibnacci(1)=1 //Fibnacci(n)=Fibnacci(n-1)+Fibnacci(n-2) [n>1] / ...
- 斐波那契数列三种实现+矩阵乘法+矩阵cimi
package com.lyk.kk;/** * Created by Administrator on 2017/9/4. */ public class A1 {//矩阵乘法 public int ...
- python3实现斐波那契数列--4种方法
基础版(list方法) # 比较占内存 w = int(input("输入一个数字还你一个斐波那契数列:")) list_res = [] def list_n(n):if n&g ...
- Python 求解斐波那切(三种方法)
普通递归版 def fib(n):return fib(n-1)+fib(n-2) if n >= 2 else n 迭代版 def fib(n):if n < 2:return na, ...
- 求第 N 个 斐波那契数的多种方法
斐波那契数列 是一个非常美丽.和谐的数列,也是一个黄金分割数列.符合黄金分割比0.618.有人说它起源于一对繁殖力惊人.基因非常优秀的兔子,也有人说远古时期的鹦鹉就知道这个规律. 斐波那契数列 ...
- 斐波那契的N种实现方式
文章目录 前言 实现方式 迭代 动态规划 同余优化 普通递归 记忆化dfs 矩阵快速幂 通向公式 打表 END 前言 学习计算机编程的过程中必然少不了对斐波那契数列的认识和编写. 斐波那契数列 的序列 ...
- 斐波那契数列两种算法实现(循环,递归)
首先是最简单的递归算法,相信很多初学者第一次接触递归这种算法都是从写一个斐波那契数列开始的. 这里除了递归算法之外我还会介绍循环算法 首先是最基础的递归算法 #include <stdio.h& ...
- 斐波那契序列的实现方法及对比
#include<iostream> using namespace std; int FeiboNon(int n) // 非递归实现 {int Feif = 1;int Feis = ...
最新文章
- ashx和asmx的HttpContext
- APP技巧:微信10个实用小技巧,太实用了,赶紧收藏!
- 怎么赚美金_我16岁时如何赚到200,000美元
- macos 此服务器的证书无效_网易出现重大失误,忘记续费HTTPS证书导致大量用户受影响...
- 20120918-LIST类定义《数据结构与算法分析》
- dd命令打包多个文件_linux下如何tar打包多个并列文件夹,如:将a文件夹 b文件夹 c文件夹,打包成d.tar文件...
- 用matlab做bp神经网络预测,matlab人工神经网络预测
- 群智能算法(遗传算法, 粒子群算法, 蚁群算法原理与实例分析)
- linux 移动硬盘 mac,Mac下使用NTFS格式的移动硬盘
- 《大化传输网》学习笔记(三)————OTN系统的保护
- 轻松获得oblog2.52的WebShell
- stm8s003中串口中断问题
- NTL-NTL安装报错
- 详解 Android 系统启动流程
- pytorch 中pad函数toch.nn.functional.pad()的使用
- 解决tar: Error is not recoverable: exiting now
- 渗透测试-不死马的创建和查杀
- [日推荐] 『闲聊助手』人工智能小程序,仅此一款!-极乐商店store.dreawer.com
- linux nginx安装https安全证书
- sshpass报错Host key verification failed