斐波那契数列的相关题目是面试常见的,所以我看了些资料总结记录一下这些小的知识点。

1. 元组实现

代码:

fibs = [0, 1]

for i in range(8):

fibs.append(fibs[-2] + fibs[-1])

print(fibs)

输出:

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

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:10])

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

i, j = 0, 1

while i < 10000:

print( 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

5.列表生成式实现

def fib(n):

if n == 1 or n == 0:

return 1

else:

return fib(n - 2) + fib(n - 1)

print([fib(n) for n in range(10)])

这个计算斐波那契数列前n项很简单,但是从下面的图可以看出这个计算花费的时间较多因为会重复计算很多值。

Paste_Image.png

这个时候我需要修改一下,加入缓存机制。

def fib(n, cache=None):

if cache is None:

cache = {}

if n in cache:

return cache[n]

if n == 1 or n == 0:

return 1

else:

cache[n] = fib(n - 2, cache) + fib(n - 1, cache)

return cache[n]

print([fib(n) for n in range(999)])

这样即使是n的值很大也能很快的计算很出来。

python显示1000以内的斐波拉契数列_Python 实现斐波那契数列方法及其优化总结相关推荐

  1. python显示1000以内的斐波拉契数列_python实现斐波那契数列

    首先想到的是用递归来解决 求100内的斐波那契数列: def diGui(num=100): a,b = 0,1 # 为了方便看打印,我就用list存一下 lit = [] while a < ...

  2. python输出1000以内回文数_「答案」python每日一题20201108

    质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数.用python输出1000以内的所有质数. #####方法一#####def isPrime(n): if n <=1: r ...

  3. Python计算1000以内素数的和

    Python计算1000以内素数的和 m = 3 s = 5 while (m<99):m += 1for i in range (2,m):if m%i == 0:breakelse:s += ...

  4. Python输出1000以内质数代码

    答: 以下是输出1000以内质数的Python代码: for num in range(2, 1000): for i in range(2, num): if num % i == 0: break ...

  5. python寻找1000以内的阿姆斯特朗数

    文章目录 方法一:计算出位数然后用for循环 方法二:用while循环+判断位数 阿姆斯特朗数定义:如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数. 例如1^3 + 5^3 + ...

  6. python 求1000以内的完数

    一个数如果恰好等于它的因子之和,这个数就称为"完数". 例如6=1+2+3.编程找出1000以内的所有完数. count = 0 for i in range(1,1001):li ...

  7. python找1000以内的完数_Python编程题3--找出1000以内的完全数

    题目 如果一个数恰好等于它的因子之和,则称该数为"完全数",又称完美数或完备数.例如: 第一个完全数是6,它有约数1.2.3.6,除去它本身6外,其余3个数相加,1+2+3=6. ...

  8. 使用Python获取1000以内的质数

    质数:就是只能被1和本身整除的数,1除外,如2,3,5,7,11,13等等 ##求1000以内的质数(1和本身除尽的数) #coding:utf-8 num=[]; i=2 for i in rang ...

  9. python斐波那契递归_Python递归斐波那契示例

    python斐波那契递归 Good day, learners! In this tutorial we are going to learn about Python Recursion and u ...

  10. Python求1000以内质数(素数)

    import math def getPrime(maxNum):primeList = []for x in range(2,maxNum+1):x_sqrt = math.sqrt(x)for p ...

最新文章

  1. c 宏定义用法#define
  2. 最强辅助Visualizer:简化你的Vision Transformer可视化!
  3. 小程序不支持wx.request同步请求解决方法
  4. python【蓝桥杯vip练习题库】ALGO-157 阶乘末尾(高精度)
  5. 单片机中灯泡显示miss_单片机实例分享,如何设计八路抢答器
  6. php+compose+使用,docker使用 docker-compose配置PHP环境(php+nginx+mysql)及启动
  7. leetcode116. 填充每个节点的下一个右侧节点指针
  8. gatsby_与Gatsby一起使用React Context API
  9. python高阶函数(三分钟读懂)
  10. 再谈UDP协议—浅入理解深度记忆
  11. ld: warning: cannot find entry symbol _start; defaulting to 00000000080481d8
  12. 面试必会 HashMap抄底不再怕
  13. 《Flash MX从入门到精通》内容简介
  14. ps盖印图层在哪里_PS如何盖印图层?PS盖印图层快捷键
  15. 用户画像设计与搭建(附金融行业用户画像案例)
  16. 计算机max函数怎么操作,excel中max函数怎么使用
  17. Linux内存:内存管理的实质 (转CU上frank_seng 的总结,感谢frank_seng )
  18. 软件测试自动登录、浏览记录方向原理——基于Cookie和Session的区别和应用场景
  19. java计算机毕业设计招聘管理系统源码+系统+mysql数据库+lw文档
  20. 拷机测试需要多久_如何科学理解麒麟9000的拷机功耗?

热门文章

  1. php中递归创建目录
  2. Flexbox属性介绍
  3. TOMCAT下载及配置
  4. 论网络工程中,系统开发设计可行性研究及市面产品对比!
  5. 栈和队列的基础算法学习(EPI)
  6. 揭示Win32 API拦截细节/API hooking revealed (2)
  7. ci框架 乱码 mysql_CodeIgniter(CI)发邮件标题中文乱码解决方案
  8. 火狐浏览器_全球知名度非常高的火狐浏览器,它好在哪呢?
  9. input输入框大小设置_Qualtrics调查问卷设计1-如何在输入框前后添加辅助文字
  10. 电脑可以关机,不宜经常断电