将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 sqrtdef 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 curfor i in SubFib(10, 200): print i
我的提示是学习阅读所需内容。欧拉计画(google for Euler)将会训练你这样做:P祝你好运,玩得开心!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)