2016-11-07 70 views
0

這是我的在線課程模塊的一部分,我需要編寫一個程序,用戶輸入number(n),然後程序會在斐波那契數列中打印第一個n數字。顯示斐波那契計算中的所有數字

我目前編寫的程序,以便打印出某個位置的fibonacci號碼。例如,如果我輸入「7」,它將打印「13」。

n = int(input("Enter a number:")) 
fibonacciSeries = ((1+sqrt(5))**n-(1-sqrt(5))**n) /(2**n*sqrt(5)) 
print (fibonacciSeries) 

如何修改此代碼,以便打印出序列中第7個數字前的所有數字?

+1

你知道斐波那契的遞歸形式和關閉嗎?或者將閉合的表格放在循環中? – doctorlove

回答

0

嗯......假設你的計算是正確的(這可能是,我只是從來沒有見過之前)

n = int(input("Enter a number:")) 
for i in range(1,n+1): 
    fibonacciSeries = ((1+sqrt(5))**i-(1-sqrt(5))**i) /(2**i*sqrt(5)) 
    print (fibonacciSeries) 
1

如果你需要,如果你也重複,你需要循環的操作,需要存儲重複操作的結果你需要一個列表。因此,使用列表理解來創建所有數字的列表,直到i(重命名爲了在range中使用)。

然後,您可以在print調用中解壓縮以查看所有生成的數字。另外,/是浮點除法;你地板師//這裏經過大概是這樣我修改爲你:

i = int(input("Enter a number:")) 
fibonacciSeries = [((1+sqrt(5))**n-(1-sqrt(5))**n)//(2**n*sqrt(5)) for n in range(1, i+1)] 
print ("Fibonacci Nums: ", *fibonacciSeries) 

表達:

[(...) for n in range(1, 1+1)] 

將重複操作中(...)i倍。

這導致:

Enter a number:7 
Fibonacci Nums: 1.0 1.0 2.0 3.0 5.0 8.0 13.0 
0

你可以把它放在一個週期,就像這樣:

n = int(input("Enter a number:")) 
for i in range(n + 1): 
    fib = ((1+sqrt(5))**n-(1-sqrt(5))**n) /(2**n*sqrt(5)) 
    print(fib) 
0

如果您已經計算斐波那契序列的第一n-1值,那麼就沒有理由不使用它們來確定第12期的n

a, b = 0, 1 #set a=0, b=1 
for _ in range(n): #do the following n times 
    print(a) #print one term each loop, for a total of n terms 
    a, b = b, a+b #advance the sequence one step 
0
def fibonacci(z): 
    a,b = 0,1 
    while True: 
    for y in xrange(z): 
     yield a 
     a,b = b, a+b 



for i in fibonacci(5): 
    print i 

斐波那契數生成器將彈出你想要的數字。我不知道你是否最終除了打印它們之外還有別的事情要做,但是無論何時,當你輸出一系列時,強烈建議使用發電機。

0

這應該這樣做。

def fibonacci(): 
    x,y = 1,1 
    n=int(input("Enter number: ")) 
    n_int=int(n-2) 
    for i in range (n_int): 
     x,y=y,x+y 
     print(x) 
    print(y)