1. 问题描述

写一个函数,输入n,求斐波那契(Fibonacci)数列的第 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:
输入:n = 2
输出:1

示例 2:
输入:n = 5
输出:5

2. 解题思路

递归一:

public int fib(int n) {if (n < 2)return n;return fib(n - 1) + fib(n - 2);
}

递归二:
当n很大的时候可能会出现数字溢出,所以我们需要用结果对1000000007求余,但实际上可能还没有执行到最后一步就已经溢出了,所以我们需要对每一步的计算都要对1000000007求余,代码如下(注意:下面代码不通过,会超时)

int constant = 1000000007;public int fib(int n) {if (n < 2)return n;int first = fib(n - 1) % constant;int second = fib(n - 2) % constant;return (first + second) % constant;
}

斐波那契数列递归的时候会造成大量的重复计算,比如就计算fib(6)为例来看下

我们看到上面相同颜色的都是重复计算,当n越大,重复的越多,所以我们可以使用一个map把计算过的值存起来,每次计算的时候先看map中有没有,如果有就表示计算过,直接从map中取,如果没有就先计算,计算完之后再把结果存到map中。

递归三:

class Solution {int constant = 1000000007;public int fib(int n) {return fib(n,new HashMap());}public int fib(int n, Map<Integer,Integer> map){if (n<2){return n;}if (map.containsKey(n)){return map.get(n);}else{int first = fib(n-1,map)%constant;map.put(n-1,first);int second = fib(n-2,map)%constant;map.put(n-2,second);int result = (first+second)%constant;map.put(n,result);return result;}}
}

36--斐波那契数列相关推荐

  1. 剑指offer——面试题10:斐波那契数列

    个人答案: 1 #include"iostream" 2 #include"stdio.h" 3 #include"string.h" 4 ...

  2. HDU4549 M斐波那契数列 —— 斐波那契、费马小定理、矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-4549 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Li ...

  3. 斐波那契数列的实现(简单递归和动态规划)

    斐波那契数列的实现(简单递归和动态规划) 一.简单递归的实现 1 #include "stdafx.h" 2 #include <string> 3 using nam ...

  4. 斐波那契数列的低效与高效解法 【转】

    文章来自:http://blog.csdn.net/mshantingting/article/details/22689573 斐波那契数列(又名黄金分割数列)在数学上的定义如下: 许多人包括作者自 ...

  5. 使用循环计算斐波那契数列

    1 /* 2 * 使用循环计算斐波那契数列的前 20 项,已经前 20 项的和. 3 提示:斐波那契数列:1,1,2,3,5,8,13,21- 4 从第三项开始,每一项为前面两项的和 5 6 */ 7 ...

  6. P2626 斐波那契数列(升级版)

    题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数). 题目描述 ...

  7. 算法之矩阵计算斐波那契数列

    算法之矩阵计算斐波那契数列 本节内容 斐波那契介绍 普通方式求解斐波那契 矩阵概念 矩阵求幂 矩阵求解斐波那契 1.斐波那契介绍 斐波那契数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项. ...

  8. python3 for循环_从零开始学习PYTHON3讲义(六)for循环跟斐波那契数列

    <从零开始PYTHON3>第六讲 几乎但凡接触过一点编程的人都知道for循环,在大多数语言的学习中,这也是第一个要学习的循环模式. 但是在Python中,我们把for循环放到了while循 ...

  9. python斐波那契数列前20项_兔子繁殖问题带来的智商碾压:斐波那契数列趣谈

    本文来自公众号:超级数学建模 微信号 :supermodeling 原文标题:斐波那契数列趣谈 via 善科 by BB 一般认为斐波那契数列的提出是基于兔子的繁殖问题:如果一开始有一对兔子,它们每月 ...

  10. Python:递归输出斐波那契数列

    今天学习Python的时候做一道练习题,题目是这样的: 题目 导入 问题 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总对数 ...

最新文章

  1. 『参考』.net CF组件编程(4)——为自定义组件添加工具箱图标!
  2. C++/C union使用记一下锅
  3. ant design vue input change_vue 表单
  4. python使用matplotlib对比多个模型在测试集上的效果并可视化、设置模型性能可视化结果柱状图(bar plot)标签的小数点位数(例如,强制柱状图标签0.7显示为两位小数0.70)
  5. matlab反馈模型,—倒立摆状态反馈系统的建模及matlab仿真.docx
  6. 《大型网站技术架构:核心原理及案例分析》阅读笔记01
  7. if-else嵌套太深?教你一个新手都能掌握的设计模式搞定!
  8. devops什么意思_DevOps有什么意义?
  9. 分享《数字化建设地图》与《BI地图》,大数据知识点一次看过瘾
  10. pandas——pd.DataFrame.iloc()
  11. 计算机二级c语言编译题评分,计算机二级C语言题型和评分标准
  12. Officescan如何藉由修改用戶端機碼以開啟常用功能
  13. 软件工程期末考试题库(超全)
  14. matlab微带带通滤波器,带通滤波器的ADS仿真设计
  15. 我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
  16. 【游戏】GBA经典游戏《逆转裁判》1、2、3合集发布
  17. N,N-二甲基十二烷基胺(CAS 112-18-5)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. matlab contour3函数,matlab 等值线函数 contour
  19. 您的工厂生产精益了吗?-蔡颖先生首发于畅享网
  20. 摸鱼技能学习-持续更新

热门文章

  1. 加密机组会 会议纪要
  2. 新手如何准确的控制油门
  3. 科​目​三​路​考​操​作​步​骤
  4. 民间75个不传之密 ,医院都不知道的秘密
  5. 创业者自述:我的第一桶金是如何来的
  6. FLV文件格式(Z)(转载)
  7. JAVA 构造 MAP 并初始化 MAP、定义时就初始化
  8. 文件系统:使用 yum 安装软件包
  9. php 两变量值互换 方法
  10. 2018.08.09洛谷P3959 宝藏(随机化贪心)