剑指Offer——斐波那契数列
题目描述:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39
分析:
递归解法肯定相当耗时。
因为当n=4时,程序是这样子递归运算的:
Fibonacci(4) = Fibonacci(3) + Fibonacci(2);
= Fibonacci(2) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
= Fibonacci(1) + Fibonacci(0) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
Fibonacci(0),Fibonacci(1)被重复调用好多次,可从加法的次数看出递归次数,如果n很大时,那么递归的次数将会更多。所以我们不用递归的解法。
根据斐波那契数列的特征,我们只需由f[0],f[1]求出f[2],然后由f[1],f[2]求出f[3],这样子就减少了之前每步递归都要递归到f[0],f[1]所需的次数,直接可由前两个数得出。
不过我们不必开辟O(n)的空间大小来存储f[n],我们只需要两个值存储一前一后的值,循环就可得出结果。
代码:
class Solution {
public:
int Fibonacci(int n) {
if(n < ) return n;
int a = , b = ; // a是b的前一个值
for(int i = ; i <= n; i++) { // 循环后移求出下一个b值,a一直是b的前一个值
b += a; // 求出下一个值
a = b - a; // a等于之前的b值
}
return b;
}
};
剑指Offer——斐波那契数列的更多相关文章
- 剑指Offer 斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 思路: 不考虑递归 用递推的思路 AC代码: class Solution { public ...
- 用js刷剑指offer(斐波那契数列)
牛客网链接 下面介绍一下什么是斐波那契数列 js代码 知道了通项公式,那代码就非常简单了 function Fibonacci(n) { // write code here let pre = 1 ...
- [剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖
跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution { public: int jumpFloor(int number) ...
- 剑指offer7: 斐波那契数列第n项(从0开始,第0项为0)
1. 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 2. 思路和方法 斐波那契数列(Fibonacci sequen ...
- 剑指offer--4.斐波那契数列
int最大范围(有符号情况下,从第0项0开始)能取到第46项1836311903,47项溢出 时间限制:1秒 空间限制:32768K 热度指数:473928 题目描述 大家都知道斐波那契数列,现在要求 ...
- 剑指Offer-7.斐波那契数列(C++/Java)
题目: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 分析: 斐波那契数列是0,1,1,2,3,5,8,13...也就是当前 ...
- 剑指Offer07 斐波那契数列
/************************************************************************* > File Name: 07_Fibona ...
- [剑指Offer]10-斐波那契数列(循环)-Java
题解 使用循环,时间复杂度O(n). 相关 跳台阶:f(n)=f(n-1)+f(n-2) 变态跳台阶:f(n)=2*f(n-1) 矩形覆盖:f(n)=f(n-1)+f(n-2) 全部用循环代替递归,使 ...
- 剑指offer_斐波那契数列
package solution; public class Fibonacci { /* * f(n) = f(n-1) + f(n-2) n>1 * f(0) = 0 * f(1) = 1 ...
随机推荐
- makefile之short函数
函数名称:排序函数-$(sort LIST) 函数功能:给字串"LIST"中的单词以首字母为准进行排序(升序),并去掉重复的单词. 返回值:空格分割的没有重复单词的字串. 函数说明 ...
- python学习之items()
定义 Python 字典 items() 方法以列表返回可遍历的(键, 值) 元组数组. 语法 dict.items() 说明:没有参数. 返回值 返回可遍历的(键, 值) 元组数组. 例子 > ...
- Struts提交form之后抛出异常java.lang.IllegalArgumentException: The path of an ForwardConfig cannot be null
原因:在ActionForm中使用了ActionErrors,并且ActionErrors中的内容不为空,所以Struts会根据action的配置跳转到input指定的页面.但是我在配置action的 ...
- 利用yum下载rpm离线包
# 利用yum下载rpm包 ### 简介-----------------------------yum是基于red hat系统的默认包管理器.使用yum可以安装或更新一个rpm包,并且他会自动解决包 ...
- RabbitMQ学习之:(一)初识、概念及心得
因为网上有一篇很好的RMQ的入门帖子http://lostechies.com/derekgreer/tag/rabbitmq/,所以我就不多说了,就说说我目前看了该作者1~5章后,自己的心得.(所以 ...
- iOS swift 富文本显示 富文本在iOS中使用场景和解决方案
项目中很多地方都会用到富文本的内容:比如一般的商品详情,视频详情,资讯详情等,运营人员通过后台的富文本编辑器编辑的内容,前端拿到的就是一段富文本的字符串,这富文本大多都是图片和文字的组合.我们今天介绍 ...
- 跟着百度学PHP[14]-PDO之Mysql的事务处理1
事务处理:在实际案例当中干一件事的mysql语句(好比转账,小一同学转账100,小二同学收账,在mysql当中小一就要减去转账的钱,小二就要增加100快)倘若该语句执行过程中有任何一条的sql语句出错 ...
- (译)Getting Started——1.1.2 Basic(基础)
本节教程会带你浏览创建简单的用户界面.添加自定义行为的整个过程.完成本节教程后,你创建的应用就可以运行在iPhone和iPad上了. 本节教程会教给你如下技能: 1. 使用Xcode创建和管理项目 2 ...
- python笔记-基础入门
Python 特点 1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单. 2.易于阅读:Python代码定义的更清晰. 3.易于维护:Python的成功在于 ...
- TempData,跳转后的提醒
TempData与ViewData用法一样,不同的是ViewData是当前action与对应的view中存在,TempData在下个action还有效,再往后就无效了.只是我的浅薄理解,希望不会误人子 ...