斐波那契数列(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. Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) A. Contest for Robots(数学)

    题意: n 道题,2 个答题者,已知二者的做题情况,你是受贿裁判,可以给每题指定分值(≥1),求甲乙分数(甲>乙)相差最小时最大分值的最小值. 思路: 统计只有甲或乙做出的题目数. 加一取下整判 ...

  2. c语言实现--顺序表操作

    经过三天的时间终于把顺序表的操作实现搞定了.(主要是在测试部分停留了太长时间) 1;线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素. 2;采用的实现方式:一段地址连 ...

  3. Codeforces Round #343 (Div. 2) E. Famil Door and Roads (树形dp,lca)

    Famil Door's City map looks like a tree (undirected connected acyclic graph) so other people call it ...

  4. Codeforces Round #669 (Div. 2) C. Chocolate Bunny (交互,构造)

    题意:有一个长度为\(n\)的隐藏序列,你最多可以询问\(2n\)次,每次可以询问\(i\)和\(j\)位置上\(p[i]\ mod\ p[j]\)的结果,询问的格式是\(?\ x\ y\),如果已经 ...

  5. Codeforces Round #653 (Div. 3) A. Required Remainder (数学)

    题意:有三个正整数\(x,y,n\),再\(1\)~\(n\)中找一个最大的数\(k\),使得\(k\ mod\ x=y\). 题解:先记\(tmp=n/x\),再判断\(tmp*x+y\)的值是否大 ...

  6. python代理池的构建5——对mongodb数据库里面代理ip检查

    上一篇博客地址:python代理池的构建4--mongdb数据库的增删改查 一.对数据库里面代理ip检查(proxy_test.py) #-*-coding:utf-8-*- ''' 目的:检查代理I ...

  7. 一、Python简介及下载安装

    一.关于Python Python是目前比较受欢迎的脚本语言之一,具有简洁性.易读性以及可扩展性的特点. Python与Java均可以写网页,也可以写后台功能,区别是Python执行效率低,开发效率高 ...

  8. 流媒体传输协议之 RTP (上篇)

    本系列文章将整理各个流媒体传输协议,包括 RTP/RTCP,RTMP,希望通过深入梳理协议的设计细节,能够给流媒体领域的开发者带来一定的启发. 作者:逸殊 审核:泰一 介绍 RTP,即 real-ti ...

  9. JVM ZeroTLAB 是什么意思呢?

    ZeroTLAB 是 JVM 的一个布尔型 Flag,意思是是否将新创建的 TLAB 内的所有字节归零. 默认:false 举例:-XX:+ZeroTLAB 当分配出来 TLAB 之后,根据 Zero ...

  10. 手撕 part1

    1.宏定义三个数最大值 挺有意思 max((a), (b), (c)) (a) > (b)? ((a) > (c)? (a) : (c)) ((b) > (c)? (b) : (c) ...