斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=0,F(2)=1, F(n)=F(n - 1)+F(n - 2)(≥ 3,∈ N*

本文章要解决的问题是:

1、生成前n项斐波那契数列
2、求第n项斐波那契数列的值是多少
3、给定终止值,生成此前斐波那契数列
 

1、求第n项斐波那契数列的值是多少(普通版)

根据通项公式递归求值,此种方法虽代码简洁却效率太低

1 def Fibonacci(n):
2 if n == 1: # 如果n=1,返回0
3 return 0
4 elif n == 2: # 如果n=2,返回1
5 return 1
6 else:
7 return Fibonacci(n-1) + Fibonacci(n-2) # 通项公式 F(N) = F(N-1) + F(N-2)

2、求第n项斐波那契数列的值是多少(快速版)

由于递归自顶向下的方式效率太低,我们采用自底向上的方式,先将数值正向放入列表中,最后从列表中取值。

 1 def Fibonaccii(n):
2 seq = [0,1] # 初始列表怕[0,1]
3 if n == 1: # 如果n=1,返回[0]
4 return [0]
5 elif n == 2: # 如果n=2,返回[0,1]
6 return [0,1]
7 else:
8 for i in range(n-2): # 循环往列表中添加数列,初始已有两项故添加项数为n-2
9 seq.append(seq[i]+seq[i+1]) # 添加的数列值等于前两项的和
10 return seq[-1] # 取最后一项的值

3、给定终止值,生成此前斐波那契数列

随便给定一个数字,求不大于此数值的斐波那契数列

def Fibonacciii(n):
seq = [0,1] # 初始化列表
i = 0 # 初始i
if n == 0: # 如果n=0,返回列表[0]
return [0]
else:
if n <= 3: # 如果0<n<3
for i in range(n): # 循环往初始列表中添加斐波那契数列
seq.append(seq[i]+seq[i+1])
return seq
else: # 如果n > 3
while True: # 理论上当n 不确定时,需要添加的项数也是不确定的,故死循环
if seq[-1] <= n: # 一直添加,如果添加的最后一项不大于给定值
seq.append(seq[i]+seq[i+1])
i += 1 # 每次循环i 递增
continue # 继续循环,不执行以下代码
break # 当最后一项大于给定值时,跳出死循环
return seq[0:-1] # 最后返回去掉最后一个数值的斐波那契数列

4、求前n项斐波那契数列

 1 def Fibonaccii(n):
2 seq = [0,1] # 初始化列表
3 if n == 1: # n=1,返回[0]
4 return [0]
5 elif n == 2: # n=2,返回[0,1]
6 return [0,1]
7 else:
8 for i in range(n-2): # n>2,循环添加数列到初始列表中
9 seq.append(seq[i]+seq[i+1])
10 return seq

Python算法_三种斐波那契数列算法的更多相关文章

  1. 算法导论-求(Fibonacci)斐波那契数列算法对比

    目录 1.斐波那契数列(Fibonacci)介绍 2.朴素递归算法(Naive recursive algorithm) 3.朴素递归平方算法(Naive recursive squaring) 4 ...

  2. 算法 递归 迭代 动态规划 斐波那契数列 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. 《BI那点儿事》Microsoft 时序算法——验证神奇的斐波那契数列

    斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...

  4. Python递归 — — 二分查找、斐波那契数列、三级菜单

    一.二分查找 二分查找也称之为折半查找,二分查找要求线性表(存储结构)必须采用顺序存储结构,而且表中元素顺序排列. 二分查找: 1.首先,将表中间位置的元素与被查找元素比较,如果两者相等,查找结束,否 ...

  5. 【算法】Fibonacci(斐波那契数列)相关问题

    一.列出Fibonacci数列的前N个数 using System; using System.Collections.Generic; using System.Linq; using System ...

  6. python基础练习题(题目 斐波那契数列II)

    day16 --------------------------------------------------------------- 实例024:斐波那契数列II 题目 有一分数序列:2/1,3 ...

  7. 【算法】php实现斐波那契数列

    斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21.这个数列从第3项开始,每一项都等于前两项之和. 根据这个定义,斐波那契数列的递推公式是:f(n)=f(n-1)+f(n ...

  8. 【python】迭代一列 斐波那契数列

    def fabm(n): if n < 1: print('输入不能小于1') return -1 if n == 1 or n == 2: return 1 else: return fabm ...

  9. Python迭代与递归方法实现斐波拉契数列

    首先是迭代的方法实现: def f(n): f1, f2, fn = 1, 1, 1 while n>2: fn = f1 + f2 f1 = f2 f2 = fn n = n - 1 retu ...

随机推荐

  1. JTS Geometry

    JTS Geometry关系判断和分析 JTS Geometry关系判断和分析 1.关系判断 1.1实例 2.关系分析 2.1实例 JTS(Geometry) JTS Geometry关系判断和分析 ...

  2. Spark练习之通过Spark Streaming实时计算wordcount程序

    Spark练习之通过Spark Streaming实时计算wordcount程序 Java版本 Scala版本 pom.xml Java版本 import org.apache.spark.Spark ...

  3. 网际互连__OSI七层模型

    概述 OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型 ,是一个逻辑上的定义.一个规范.它把网络从逻辑上分为了7层.每一层都有相关. ...

  4. DoTween动画插件学习

    一.简单的变量插值运算 using System.Collections; using System.Collections.Generic; using UnityEngine; using DG. ...

  5. 设计模式(九)——装饰者模式(io源码分析)

    1 星巴克咖啡订单项目(咖啡馆): 1) 咖啡种类/单品咖啡:Espresso(意大利浓咖啡).ShortBlack.LongBlack(美式咖啡).Decaf(无因咖啡) 2) 调料:Milk.So ...

  6. labuladong 算法小抄

    <labuladong的算法小抄官方完整版> 本书目前可以手把手带你解决 110 道 LeetCode 算法问题,而且在不断更 新,全部基于 LeetCode 的题目,涵盖了所有题型和技巧 ...

  7. HDOJ 1848(SG函数)

    对于SG函数来说,sg[y]=x的意义为,x与y的输赢状态是相同的 sg[y]=mex(y)的定义与n.p点的定义是相同的 #include<iostream>#include<cs ...

  8. JVM调优参数、方法、工具以及案例总结

    这种文章挺难写的,一是JVM参数巨多,二是内容枯燥乏味,但是想理解JVM调优又是没法避开的环节,本文主要用来总结梳理便于以后翻阅,主要围绕四个大的方面展开,分别是JVM调优参数.JVM调优方法(流程) ...

  9. 力扣119.杨辉三角II-C语言实现

    题目 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] 来源:力扣(LeetCod ...

  10. codeforces 7B

    B. Memory Manager time limit per test 1 second memory limit per test 64 megabytes input standard inp ...