简介:

杨辉三角每条斜线上的数之和就构成斐波那契数列。

思路:

参考文章:https://mp.weixin.qq.com/s?src=11&timestamp=1551321876&ver=1455&signature=ahEqF*AhQMM5L8e-JCqIGUm6vZ8dQHWSX70P-j-tWtN2gQYpHJSB61cItv2h5Sy-DE0E5grEEVTQikdpIT9tC34u5qLh-mvM*PhBuE3S6nU32*9k1NmkS3krk0YVxRpM&new=1

1.递归法

  1. class Solution:
  2. def Fibonacci(self, n):
  3. # write code here
  4. if n <= 1:
  5. return n
  6. while n >= 2:
  7. return self.Fibonacci(n-1)+self.Fibonacci(n-2)

f(a)会重复计算,这就是递归的最大问题,对于同一个f(a),不能复用。这样直接求解,时间复杂度是指数级的,不可行;

2.正推法

上述方法是采用反向推导,假设要求f(5), 则f(5)=f(4)+f(3); 而f(4)=f(3)+f(2),f(3)=f(2)+f(1);.......一路递归下去,最终都将递归到f(0)和f(1)上来。反过来想,我们不倒着f(n),f(n-1),f(n-2)这么计算,而是f(0),f(1),f(2)…f(n)这么正向计算,岂不是更快么?这么正向的计算,只需要一个for循环,就能够计算出f(n)的值,时间复杂度是O(n)

  1. # -*- coding:utf-8 -*-
  2. class Solution:
  3. def __init__(self):
  4. self.array=[0]*40 #数组定义,初始化
  5. def Fibonacci(self, n):
  6. # write code here
  7. self.array[0]=0
  8. self.array[1]=1
  9. for i in range(2,n+1): #直接遍历所有
  10. self.array[i]=self.array[i-1]+self.array[i-2]
  11. return self.array[n]

关于数组定义:

  • 一维数组:a1 = [0]*10; a2 = range(10);a3 = [0 for x in range(0, 10)]
  • 二维数组:a = [ [ random.random() for x in range(10) ]  for y in range(5)]  #5行10列];  b=[ [ 0 ]*10 ] * 5

在一维数组中,上述几种方式没有区别。

但是在二维数组中,a[0][0]=1时,只有a[0][0]为1,其他全为0。b[0][0]=1时,b[0][0],b[1][0]...直到b[4,0]全部为1。由此得到二维数组中,若采用b这种定义,每一列数据将全是一个相同的引用,即指向同一地址。故 b = [[0]*10]*5并不符合我们常规意义上的二维数组。

此外还要多种求解方式,复杂度从指数级到O(n) 到 O(lgn) 到 O(1)均有,具体可读参考文章

[剑指offer] 7. 斐波那契数列 (递归 时间复杂度)的更多相关文章

  1. 《剑指offer》斐波那契数列

    本题来自<剑指offer> 斐波那契数列 矩阵覆盖 题目一: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 思路: ...

  2. 剑指offer:斐波那契数列

    目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n< ...

  3. 力扣 - 剑指 Offer 10- I. 斐波那契数列

    题目 剑指 Offer 10- I. 斐波那契数列 思路1(递归 / 自顶向下) 这题是很常见的一道入门递归题,可以采用自顶向下的递归方法,比如我们要求第n个位置的值,根据斐波那契数列的定义fib(n ...

  4. 【Java】 剑指offer(9) 斐波那契数列及青蛙跳台阶问题

     本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项 ...

  5. Go语言实现:【剑指offer】斐波那契数列

    该题目来源于牛客网<剑指offer>专题. 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0) n<=39 Go语言实现: 递归: ...

  6. 剑指offer三: 斐波拉契数列

    斐波拉契数列是指这样一个数列: F(1)=1; F(2)=1; F(n)=F(n-1)+F(n); public class Solution { public int Fibonacci(int n ...

  7. 剑指Offer 7. 斐波那契数列 (递归)

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 题目地址 https://www.nowcoder.com/prac ...

  8. 《剑指offer》-斐波那契数列

    大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 这么直接的问fibonacci,显然是迭代计算.递归的问题在于重复计算,而迭代则避免了这一点:递归是自 ...

  9. 【剑指offer】斐波那契数列

    一.题目: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 二.思路: 式子: n=0时,f=0:n=1或者n=2时f=1:否则f=f(n-1)+f(n ...

随机推荐

  1. django与mysql实现简单的增删查改

    模型定义 from django.db import models class Grades(models.Model): g_name = models.CharField(max_length=2 ...

  2. POI 海量数据

    http://blog.csdn.net/Little_Stars/article/details/8266262

  3. 第一篇、Android Supersu 权限管理定制,隐藏过滤权限,指定APP最高权限

    近期有个需求,在预装ROM的时候,须要权限,可是又不同意全部的应用都有权限,仅仅同意自己的应用有最高的权限(当然没有系统签名情况下). 所以.编译了CM 提取了supersu进行了二次定制,让他进行权 ...

  4. Dalvik和ART简单介绍

    1.classes.dex文件初识     我们先把QQ_236.apk后缀改为QQ_236.zip,然后解压.发现有一个classes.dex文件,这个classes.dex是java源代码编译后生 ...

  5. Rose2003执行出现 -2147417848 (80010108)&#39;:Automation 错误

    上篇博客在结尾的时候.我提到了Ration Rose2003执行出现"-2147417848 (80010108)':Automation错误"的问题.今天这篇博客就来介绍一下怎样 ...

  6. NumPy和Pandas常用库

    NumPy和Pandas常用库 1.NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数 ...

  7. 杂项:MSP(管理服务提供商)

    ylbtech-杂项:MSP(管理服务提供商) 随着外包市场的日益成熟,为了满足企业的需求,一个全新的业务方向被开发出来—MSP.MSP采用业界领先的系统管理技术,由经验丰富的系统管理专家通过WAN为 ...

  8. [MySQL] 统计函数记录

    时间段统计========== 按年汇总,统计:select sum(mymoney) as totalmoney, count(*) as sheets from mytable group by ...

  9. oracle 索引优化之distinct

    11G R2环境: --DISTINCT测试前的准备drop table t purge;create table t as select * from dba_objects;update t se ...

  10. Swagger 隐藏具体API

    一.why 在swagger ui界面中有时候不想显示某些api,通过下面的方式可以实现. 1.1.新建一个类实现IDocumentFilter接口 using Swashbuckle.Swagger ...