2015-04-29 28 views
1

我遇到了麻煩嘗試創建一個快速倍增斐波那契python生成器,使用以下。快速加倍斐波那契Python生成器序列

鑑於F(k)和F(K + 1),我們可以計算出這些:

F(2k) = F(k)[2F(k + 1) − F(k)] 
F(2k+1) = F(k+1)^2 + F(k)^2 

我已經得到了最簡單的(慢)斐波那契數發生器如下:

def fib_generator(): 
    n = 1 
    n0 = 1 
    while True: 
     yield n 
     n, n0 = n + n0, n 
+1

你究竟想要什麼?既不產生*所有*斐波納契數字也不產生一些快速增長的子序列對我來說是有意義的。前者最好用已有的簡單工具完成,而後者缺少很多。那有什麼意義? –

回答

1

的實現可能是:

from itertools import count 

def fast_fib_generator(): 
    F = [1, 1] 
    yield 1 
    yield 1 
    for k in count(1): 
     F.append(F[k] ** 2 + F[k - 1] ** 2) 
     yield F[-1] 

     F.append(F[k] * (2 * F[k + 1] - F[k])) 
     yield F[-1] 


for x in fast_fib_generator(): 
    print x 

的結果:

1 
1 
2 
3 
5 
8 
13 
21 
34 
0
def fibonacci(number): 
    numbers = [0, 1] 
    while len(numbers) < number: 
     numbers[len(numbers):len(numbers)] = [numbers[len(numbers)-2] + numbers[len(numbers)-1]] 
    return numbers 

首先得到fibonacci序列列表......然後循環遍歷。

def fib_gen(number): 
    for iter in fibonacci(number): 
     print iter