python怎么编写_Python-如何写斐波那契数列?

小编典典

将Fib序列公式写成无穷大

在数学中,它以递归形式给出:

fec9058e80-76.png

在编程中,不存在无限。你可以使用递归形式直接用你的语言翻译数学形式,例如在Python中,它将变为:

def F(n):

if n == 0: return 0

elif n == 1: return 1

else: return F(n-1)+F(n-2)

用你喜欢的语言尝试一下,随着n变大,这种形式需要很多时间。实际上,这是时间O(2 n)。

继续在我链接到你的网站上,将看到此信息(在Wolfram上):

斐波那契方程

这是一个非常容易实现并且非常非常快速的Python代码:

from math import sqrt

def F(n):

return ((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5))

另一种方法是遵循定义(来自Wikipedia):

序列的第一个数字为0,第二个数字为1,每个后续数字等于序列本身前两个数字的和,得出序列0、1、1、2、3、5、8等

如果你的语言支持迭代器,则可以执行以下操作:

def F():

a,b = 0,1

while True:

yield a

a, b = b, a + b

仅从Fib序列显示startNumber到endNumber。

一旦知道了如何生成斐波那契数,你只需循环遍历数字并检查它们是否验证了给定条件。

假设现在你编写了af(n)来返回斐波那契数列的第n个项(如带有sqrt(5)的项)

在大多数语言中,你可以执行以下操作:

def SubFib(startNumber, endNumber):

n = 0

cur = f(n)

while cur <= endNumber:

if startNumber <= cur:

print cur

n += 1

cur = f(n)

在python中,我将使用迭代器形式并进行以下操作:

def SubFib(startNumber, endNumber):

for cur in F():

if cur > endNumber: return

if cur >= startNumber:

yield cur

for i in SubFib(10, 200):

print i

我的提示是学习阅读所需内容。欧拉计画(google for Euler)将会训练你这样做:P祝你好运,玩得开心!

2020-02-12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值