利用Python输出斐波拉契数列

创建一个程序,使这个程序在得到用户输入的值(n)后,自动的输出从1到n的所有值(F1,F2,F3,……,Fn)

利用递归:

#定义一个函数,用于计算第n项的斐波拉契数列值
def Fibonacci(n):
    if n==1 or n==2:
        return 1
    else:
        return Fibonacci(n-1) + Fibonacci(n-2)
k=1;Fibon=[]
#利用死循环确保输入数正确
while True:
    n=int(input("please input the number:\n"))
    if n<=0:
        print("Wrong!")
    else:
        break
#利用迭代从1到n存储所有斐波拉契数列值
for i in range (1,n+1):
    Fibon.append(Fibonacci(i))
#输出
print(Fibon)
弊端在于,从F3到F(n-2)都求2遍

利用迭代:

版本1:输入n,输出前n项

#利用迭代存储好所有的项 
def fibo(n):
    fib=[]
    if n==1:
        fib=[1]
    elif n==2:
        fib=[1,1]
    else:
        fib.append(1)
        fib.append(1)
        for i in range (2,n):
            fib.append(fib[i-1]+fib[i-2])
    return fib
#同上
while True:
    n=int(input("please input the number:\n"))
    if n<=0:
        print("Wrong!")
    else:
        break
b=fibo(n)
print (b)
版本2:输入n,判断n是不是此数列的项,并输出项数

#循环反复赋值
def fibo(n):
    x,y=0,1
    result = []
    while y<=n:
        result.append(y)
        x,y=y,x+y
    return result
while True:
    n=int(input("please input the number:\n"))
    if n<=0:
        print("Wrong!")
    else:
        break
Fibonacci = fibo(n)
n1 = len(Fibonacci)
if n == Fibonacci[n1-1]:
    print('%d是第%d项'%(n,n1))
else:
    print('%d不是斐波拉契数列的项!'%n)
以上2版缺陷在于,数据全部储存在内存中,大量数据时会很耗内存

利用yield:

def fibo():
    x,y=0,1
    while True :
        yield x
        x,y=y,x+y

while k==1:
    n=int(input("please input the number:\n"))
    if n<=0:
        print("Wrong!")
    else:
        break
if __name__=="__main__":
    import itertools
    print (list(itertools.islice(fibo(),n)))


你可能感兴趣的:(利用Python输出斐波拉契数列)