2016-11-07 67 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)