小编典典
将Fib序列公式写成无穷大
在数学中,它以递归形式给出:
在编程中,不存在无限。你可以使用递归形式直接用你的语言翻译数学形式,例如在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