2016-10-01 62 views
2

所以我想遍歷Fibonacci序列(但這可能適用於任何非算術序列)。我寫了一個函數斐波那契:遍歷Fibonacci序列

from math import sqrt 
def F(n): 
    return ((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5)) 

返回對於任何給定的輸入斐波那契數。這一點似乎工作正常。但是,我想包括一些條件,如偶數和F(n)低於一定限制。我嘗試使用如下循環:

def ser(): 
    count = 0 
    for i in F(n): 
     if F(n) <= 4000000 and F(n) % 2 == 0: 
      count = count + F(n) 

但似乎你不能像迭代循環中使用F(n)那樣循環。我是一個Python新手,所以如何使用我創建的F(n)函數遍歷序列?謝謝

+1

什麼是F(n)?它沒有被定義。 – zvone

+1

我沒有看到你創建了一個'F()'函數。你創建了一個'fibonacci()'函數。 –

+0

如果你的'F(n)'函數返回一個整數,只要將循環改爲'for x inrange(F(n))',它就可以工作。 – zipa

回答

0

你想要運行斐波納契數的n的範圍是多少?
您的斐波那契數的定義是在一個封閉的形式,所以你需要給你要計算每個號碼:

import itertools 
count = 0 
for n in itertools.count(1): 
    if F(n) > 4000000: 
     break 
    if F(n) % 2 == 0: 
     count += F(n) 

可以使用斐波那契數的生成形式和使用itertools.takewhile()限制輸出:

def F(): 
    a,b = 0,1 
    yield b 
    while True: 
     a, b = b, a + b 
     yield b 

count = sum(f for f in it.takewhile(lambda x: x <= 4000000, F()) if f % 2 == 0) 
+0

行,所以我要n作爲F(n)<1000,例如,使所有斐波納契數小於1000例如奇數,或以7結尾。 – sahwahn

+0

這會將輸入的最大值設置爲F(n)而不是F(n)的值。 – AChampion

+0

好的,理解你的問題更多 - 你需要在你的循環中休息一下......查看更新。 – AChampion