python实现斐波那契数列的方法示例


Posted in Python onJanuary 12, 2017

介绍

斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下递归的方法定义:

F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)

python实现斐波那契数列的方法示例

1. 元组实现

fibs = [0, 1]
for i in range(8):
 fibs.append(fibs[-2] + fibs[-1])

这能得到一个在指定范围内的斐波那契数列的列表。

2. 迭代器实现

class Fibs:
 def __init__(self):
  self.a = 0
  self.b = 1

 def next(self):
  self.a, self.b = self.b, self.a + self.b
  return self.a

 def __iter__(self):
  return self

这将得到一个无穷的数列,可以采用如下方式访问:

fibs = Fibs()
for f in fibs:
 if f > 1000:
  print f
  break
 else:
  print f

3. 通过定制类实现

class Fib(object):
 def __getitem__(self, n):
  if isinstance(n, int):
   a, b = 1, 1
   for x in range(n):
    a, b = b, a + b
   return a
  elif isinstance(n, slice):
   start = n.start
   stop = n.stop
   a, b = 1, 1
   L = []
   for x in range(stop):
    if x >= start:
     L.append(a)
    a, b = b, a + b
   return L
  else:
   raise TypeError("Fib indices must be integers")

这样可以得到一个类似于序列的数据结构,可以通过下标来访问数据:

f = Fib()
print f[0:5]
print f[:10]

4.Python实现比较简易的斐波那契数列示例

先放一个斐波那契数列出来瞧瞧…

0 1 1 2 3 5 8 13 21 34 55 89 144 233...

首先给头两个变量赋值:

i, j = 0, 1

当然也可以这样写:

i = 0
j = 1

接着定个范围,就10000之内好了:

while i < 10000:

然后在while语句中输出i并设计逻辑:

print i,
 i, j = j, i+j

在这里需要注意:“i, j = i, i+j”这条代码不能写成如下所示:

i = j
j = i+j

如果写成这样,j就不是前两位相加的值,而是已经被j赋过值的i和j相加的值,这样的话输出的数列会如下所示:

0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192

正确的整片代码如下所示:

i, j = 0, 1
while i < 10000:
 print i,
 i, j = j, i+j

最后展示运行结果:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765

总结

以上就是关于利用Python实现斐波那契数列的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
粗略分析Python中的内存泄漏
Apr 23 Python
Python时间的精准正则匹配方法分析
Aug 17 Python
Python使用re模块实现信息筛选的方法
Apr 29 Python
python中实现字符串翻转的方法
Jul 11 Python
Django 导出项目依赖库到 requirements.txt过程解析
Aug 23 Python
手机使用python操作图片文件(pydroid3)过程详解
Sep 25 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
使用OpenCV去除面积较小的连通域
Jul 05 Python
Python 爬虫性能相关总结
Aug 03 Python
利用python如何实现猫捉老鼠小游戏
Dec 04 Python
python垃圾回收机制原理分析
Apr 13 Python
Python爬虫利用cookie实现模拟登陆实例详解
Jan 12 #Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
Jan 12 #Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 #Python
Python获取文件所在目录和文件名的方法
Jan 12 #Python
深入理解Python中变量赋值的问题
Jan 12 #Python
Python时间获取及转换知识汇总
Jan 11 #Python
json跨域调用python的方法详解
Jan 11 #Python
You might like
PHP面向对象的使用教程 简单数据库连接
2006/11/25 PHP
深入array multisort排序原理的详解
2013/06/18 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
jquery 指南/入门基础
2007/11/30 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
理解JS事件循环
2016/01/07 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
[57:53]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#3OG VS VP
2016/03/03 DOTA
python self,cls,decorator的理解
2009/07/13 Python
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
python多线程并发实例及其优化
2019/06/27 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
旅游管理本科生求职信
2013/10/14 职场文书
幼儿园教师奖惩制度
2014/02/01 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
金砖之国观后感
2015/06/11 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
Python 文本滚动播放器的实现代码
2021/04/25 Python
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫