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多线程同步Lock、RLock、Semaphore、Event实例
Nov 21 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
django中的HTML控件及参数传递方法
Mar 20 Python
Python运维之获取系统CPU信息的实现方法
Jun 11 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
Python Numpy库安装与基本操作示例
Jan 08 Python
python Selenium实现付费音乐批量下载的实现方法
Jan 24 Python
python的内存管理和垃圾回收机制详解
May 18 Python
parser.add_argument中的action使用
Apr 20 Python
PyCharm 2020.2 安装详细教程
Sep 25 Python
Python getsizeof()和getsize()区分详解
Nov 20 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 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
基于mysql的bbs设计(五)
2006/10/09 PHP
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
js实现div闪烁原理及实现代码
2014/06/24 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
js构造函数创建对象是否加new问题
2018/01/22 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
JS回调函数深入理解
2019/10/16 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
JS实现简单打字测试
2020/06/24 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
详解Python的Lambda函数与排序
2016/10/25 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
python 函数内部修改外部变量的方法
2018/12/18 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
Python 多进程、多线程效率对比
2020/11/19 Python
运动会广播稿300字
2014/01/10 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
会计岗位工作总结
2015/08/12 职场文书