本题来自《剑指offer》 斐波那契数列 矩阵覆盖

题目一:

  大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39

思路:

  递归方式:return n<=0 ? 0 : n+fib(n-1)

  递归是由于函数调用自身,有时间和空间的消耗,每次自身的调用都需要在内存栈中分配空间以保存参数,返回地址和变量,而且栈中压入和弹出数据都需要时间,效率不高,如果数据过大,会导致栈内存溢出。但是代码简洁。

  循环方式:O(n)时间内的操作 

  循环是通过设置计算的初始值和终止条件在一个范围内重复运算。采用迭代的方式,从头计算后面的值。

C++ Code:

class Solution {
public:
int Fibonacci(int n) { //采用循环的方式时间为O(n)
int res[] = {,}; //初始的两个值【0,1】
if (n < ){ //当n小于2直接返回
return res[n];
}else{
int fibOne = ;
int fibTwo = ;
int fib = ;
for (unsigned int i = ;i<=n;i++){
fib = fibOne + fibTwo;
fibOne = fibTwo;
fibTwo = fib;
}
return fib;
}
}
};

Python Code:

# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n): #采用循环的方式计算
# write code here
res = [0,1] #n为0和1时候为【0,1】
if n < 2:
return res[n] #如果n小于2直接返回
else: #如果n大于2,采用叠加的方式计算
fibOne = 0
fibTwo = 1
fib = 0
for i in range(2,n+1):
fib = fibOne + fibTwo #依次计算前面两个值,最终返回
fibOne = fibTwo
fibTwo = fib
return fib

总结:

  本题延伸,比如跳台阶问题,或者汉诺塔问题,都是采用递归方式。

  如果需要重复性的多次计算相同的问题,通常可以采用递归或者循环两种方式。

题目二:

  我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

思路:

  f(n) = f(n-1)+f(n-2)

Python Code:

# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
res = [0,1]
if number < 2:
return res[number]
one = 0
two = 1
for i in range(number+1):
one,two = two,one+two
return one

《剑指offer》斐波那契数列的更多相关文章

  1. 剑指Offer 斐波那契数列

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 思路: 不考虑递归 用递推的思路 AC代码: class Solution { public ...

  2. 剑指Offer——斐波那契数列

    题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 分析: 递归解法肯定相当耗时. 因为当n=4时,程序是这样子递归运算的:Fibonacci( ...

  3. 用js刷剑指offer(斐波那契数列)

    牛客网链接 下面介绍一下什么是斐波那契数列 js代码 知道了通项公式,那代码就非常简单了 function Fibonacci(n) { // write code here let pre = 1 ...

  4. [剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖

    跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution { public: int jumpFloor(int number) ...

  5. 剑指offer7: 斐波那契数列第n项(从0开始,第0项为0)

    1. 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 2. 思路和方法 斐波那契数列(Fibonacci sequen ...

  6. 剑指offer--4.斐波那契数列

    int最大范围(有符号情况下,从第0项0开始)能取到第46项1836311903,47项溢出 时间限制:1秒 空间限制:32768K 热度指数:473928 题目描述 大家都知道斐波那契数列,现在要求 ...

  7. 剑指Offer-7.斐波那契数列(C++/Java)

    题目: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 分析: 斐波那契数列是0,1,1,2,3,5,8,13...也就是当前 ...

  8. 剑指Offer07 斐波那契数列

    /************************************************************************* > File Name: 07_Fibona ...

  9. [剑指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) 全部用循环代替递归,使 ...

  10. 剑指offer_斐波那契数列

    package solution; public class Fibonacci { /* * f(n) = f(n-1) + f(n-2) n>1 * f(0) = 0 * f(1) = 1 ...

随机推荐

  1. js判断浏览器类型和版本

    原网址:http://www.cnblogs.com/rubylouvre/archive/2009/10/14/1583362.html 除了另无它法,肯定不使用navigator.userAgen ...

  2. lateinit 的使用限制

    呢?使用lateinit关键字 lateinit var test:String //正确lateinit val test:String //错误lateinit var test:Float // ...

  3. 遇到以前跑一次却没问题的问题,直接maven install 再跑

    遇到以前跑一次却没问题的问题,直接maven install 再用tomcat 跑 比如,xml 路径找不到类,奇葩的报错啊

  4. php编程 之 php进阶练习

    1,php的date相关操作: PHP date() 函数可把时间戳格式化为可读性更好的日期和时间. <?php echo date("Y/m/d") . "< ...

  5. Keepalived两节点出现双VIP情况及解决方法【原创】

    1.故障现象 俩台服务器keepalived的vip在俩台服务器同时出现 A:10.70.12.72 B:10.70.12.73 2.问题分析 1).先分析那台服务器在提供服务 A:10.70.12. ...

  6. C++ 三/五法则

    当定义一个类时,我们显式地或隐式地指定了此类型的对象在拷贝.赋值和销毁时做什么.一个类通过定义三种特殊的成员函数来控制这些操作:拷贝构造函数.拷贝赋值运算符和析构函数. 拷贝构造函数定义了当用同类型的 ...

  7. VIsual Studio编译OpenCV:无法打开python27_d.lib(python36_d.lib)的问题

    原文地址:http://blog.csdn.net/Chris_zhangrx/article/details/78947526 在用 VS2015 编译 Debug 版的 openCV 源码时,最后 ...

  8. 码云 Git No network connection

    背景 git,好久没用了都.心血来潮还是赶紧熟悉下吧.果不其然,每次要熟悉或开始一个东西,立马就出现问题.本来好好的环境竟然不行了,搞定后感觉应该是换了网络环境的事.这倒次要,主要让我想起了最初学习g ...

  9. $Django ajax简介 ajax简单数据交互,上传文件(form-data格式数据),Json数据格式交互

    一.ajax  1 什么是ajax:异步的JavaScript和xml,跟后台交互,都用json  2 ajax干啥用的?前后端做数据交互:  3 之前学的跟后台做交互的方式:   -第一种:在浏览器 ...

  10. chan array初始化

    package main import "fmt" func run() { chann[0] <- 1 } var chann = make([]chan int, 2) ...