36--斐波那契数列

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;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lineNumber: 1; columnNumber: 1; 前言中不允许有内容

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我是在xml配置文件中引用别的配置文件&#xff0c;本来是这样写的 <import resource"spring-mybatis.xml" /> 就报这…

idea输入法候选区不跟随光标

环境&#xff1a; win10 idea 2017.04 搜狗8.6 问题&#xff1a; idea编辑区输入法候选区不跟随光标 解决&#xff1a; 输入法改成必应输入法 不行的话不用你动手 我自砸蛋蛋。&#xff08;保命狗头。。&#xff09; 转载于:https://www.cnblogs.com/yadongliang/p/9079367.htm…

C# 反射 (Reflect)

# C# 反射 &#xff08;Reflect&#xff09; 1.基本内容 我们可以使用反射动态地创建类型的实例&#xff0c;将类型绑定到现有对象&#xff0c;或从现有对象中获取类型。然后&#xff0c;可以调用类型的方法或访问其字段和属性。 最基本的调用&#xff1a; Assembly assembly …

jsp中的%@ ...%

主要用来提供整个JSP 网页相关的信息&#xff0c;并且用来设定JSP网页的相关属性

37--计算一个字符串中每个字符出现次数

1.问题描述 需求&#xff1a;计算一个字符串中每个字符出现次数。 2.解题思路 获取一个字符串对象&#xff1b;创建一个Map集合&#xff0c;键代表字符&#xff0c;值代表次数&#xff1b;遍历字符串得到每个字符&#xff1b;判断Map中是否有该键&#xff1b;如果没有&#…

oracle thin和oci 区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Features of Oracle JDBC Drivers&#xff1a; 1.JDBC Oci 此驱动类似于传统的ODBC 驱动。因为它需要Oracle Call Interface and Net8&…

从拿到班车手册.xls到搜索附近班车地点

起因 七月份要去某厂报道了&#xff0c;异地租房的时候发现想租一个有公司班车的地方&#xff0c;却不知道哪里有班车。辗转流传出班车手册后发现搜索实在是太不方便了&#xff0c;于是有了一个主义&#xff0c;想做一个可以搜索房子地址&#xff0c;找出附近班车点&#xff08…

2018.08.09洛谷P3959 宝藏(随机化贪心)

传送门 回想起了自己赛场上乱搜的20分。 好吧现在也就是写了一个随机化贪心就水过去了&#xff0c;不得不说随机化贪心大法好。 代码&#xff1a; #include<bits/stdc.h> using namespace std; inline int read(){int ans0;char chgetchar();while(!isdigit(ch))chget…

AWT和Swing

AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写&#xff0c;这个工具包提供了一套与本地图形界面进行交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系&#xff0c;我们把它称为peers。 也就是说&#xff0c;当我们利用 AWT 来构件图形用…

解决 : Apache Tomcat/8.0.0-RC1 - Error report ... HTTP Status 404

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.报错&#xff1a; Apache Tomcat/8.0.0-RC1 - Error report HTTP Status 404 - /richer/getOnLineRicherCount The requested resour…

py 5.24

#面向对象 #类&#xff1a;模子。Person&#xff0c;不具体。 #实例/对象&#xff1a;依托于类产生的具体的带有属性的。alex #实例化&#xff1a;产生对象的过程。 alex Person() #类&#xff1a; #分为静态属性&#xff08;一般的变量&#xff09;。动态属性(函数&#xff0…

多线程原理实例应用详解

从单进程单线程到多进程多线程是操作系统发展的一种必然趋势&#xff0c;当年的DOS系统属于单任务操作系统&#xff0c;最优秀的程序员也只能通过驻留内存的方式实现所谓的"多任务"&#xff0c;而如今的Win32操作系统却可以一边听音乐&#xff0c;一边编程&#xff0…

git中使用fork

在git中使用fork相当于你在原项目的主分支上又建立了一个分支&#xff0c;你可以在该分支上任意修改。如果想将你的修改合并到原项目中时&#xff0c;可以pull request&#xff0c;这样原项目的作者如果认同你的修改&#xff0c;就可以将你修改的东西合并到原项目的主分支上去。…

一、【Collection、泛型】

主要内容 Collection集合迭代器增强for泛型 教学目标 能够说出集合与数组的区别 说出Collection集合的常用功能 能够使用迭代器对集合进行取元素 能够说出集合的使用细节 能够使用集合存储自定义类型 能够使用foreach循环遍历集合 能够使用泛型定义集合对象 能够理解泛型上下…

字符装换

2019独角兽企业重金招聘Python工程师标准>>> 字母大小写转换 a →A char toUpperCase( char ch){ if((ch >a) && (ch <z)){ return (char)(ch - 32); // 主要 这里(char)是必要的&#xff0c;因为char -32是返回的数值&#xff0c;必须转换成对应的字…

解决 Unable to translate SQLException with Error code ‘17059‘, will now try the fallback translator

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.报错&#xff1a; Unable to translate SQLException with Error code 17059, will now try the fallback translator 报错如下&…

企业使用开源软件的风险

很多时候&#xff0c;我们过高地估计了开源软件面临的版权威胁&#xff0c;开源软件并非天生就比专有软件存在更多风险。虽然在企业中开源软件越来越普及&#xff0c;但开源软件始终难以摆脱知识产权带来的阴影。2007年&#xff0c;微软声称开源软件侵犯了它235项专利&#xff…

杭电多校 Harvest of Apples 莫队

问题 B: Harvest of Apples 时间限制: 1 Sec 内存限制: 128 MB 提交: 78 解决: 35 [提交] [状态] [讨论版] [命题人:admin] 题目描述 There are n apples on a tree, numbered from 1 to n. Count the number of ways to pick at most m apples. 输入 The first line of the …

linux和GNU之间的关系

Linux只是一个操作系统内核而已&#xff0c;而GNU提供了大量的自由软件来丰富在其之上各种应用程序。 因此&#xff0c;严格来讲&#xff0c;Linux这个词本身只表示Linux内核&#xff0c;但在实际上人们已经习惯了用Linux来形容整个基于Linux内核&#xff0c;并且使用GNU 工程各…

二、【List、Set、数据结构、Collections】

主要内容 数据结构List集合Set集合Collections 教学目标 能够说出List集合特点 能够说出常见的数据结构 能够说出数组结构特点 能够说出栈结构特点 能够说出队列结构特点 能够说出单向链表结构特点 能够说出Set集合的特点 能够说出哈希表的特点 使用HashSet集合存储自定义元素…