斐波那契数列(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. 1 def Fibonacci(n):
  2. 2 if n == 1: # 如果n=1,返回0
  3. 3 return 0
  4. 4 elif n == 2: # 如果n=2,返回1
  5. 5 return 1
  6. 6 else:
  7. 7 return Fibonacci(n-1) + Fibonacci(n-2) # 通项公式 F(N) = F(N-1) + F(N-2)

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

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

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

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

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

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

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

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

    解析HTTP协议 HTTP:超文本传输协议(HyperText Transfer Protocol) HTTP是一种无状态的协议,意思是指在Web浏览器和Web服务器之间不需要建立持久的连接. HTT ...

  2. 21.iptables

    1.策略与规则链 iptables 服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,具体如下: 在进行路由选择前处理数据包(PRE ...

  3. 关于SANGFOR AC记录上网记录

    1.查看加密APP的访问记录,不支持推送证书的方式.也就是这种的是没办法查看到的:2.查看加密网站的访问记录,通过推送证书,电脑可以查看到:手机端安卓的不能,苹果可以,但是不建议做,适用性不好:3.查 ...

  4. postgres-网络传输安全-openssl

    网络传输安全 默认情况下pg服务端和客户端之间的数据传输是明文传输,有一定的安全隐患.pg中可以使用ssl进行安全的tcp/ip连接,以密文的形式进行数据的安全传输. 这个特性要求在客户端和服务器都安 ...

  5. Educational Codeforces Round 97 (Rated for Div. 2) E. Make It Increasing(最长非下降子序列)

    题目链接:https://codeforces.com/contest/1437/problem/E 题意 给出一个大小为 \(n\) 的数组 \(a\) 和一个下标数组 \(b\),每次操作可以选择 ...

  6. hdu5432Rikka with Array (数位dp+十进制转化为二进制)

    Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...

  7. hdu4686 Arc of Dream

    Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission ...

  8. python常用连接字符串

    1.使用占位符% print(('%s%s%s' % ('one','two', 'three'))) 2.'+'号连接 字符串是不可变对象,每次改变会申请一块新的内存,操作符+连接字符串的时候会涉及 ...

  9. 03、xpath及css的用法

    1.xpath语法 2.css语法

  10. ElasticSearch 搜索引擎概念简介

    公号:码农充电站pro 主页:https://codeshellme.github.io 1,倒排索引 倒排索引是一种数据结构,经常用在搜索引擎的实现中,用于快速找到某个单词所在的文档. 倒排索引会记 ...