利用Python输出斐波拉契数列

来源:互联网 发布:个人如何使用阿里云 编辑:程序博客网 时间:2024/05/21 09:27

创建一个程序,使这个程序在得到用户输入的值(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:        breakb=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 resultwhile True:    n=int(input("please input the number:\n"))    if n<=0:        print("Wrong!")    else:        breakFibonacci = 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+ywhile k==1:    n=int(input("please input the number:\n"))    if n<=0:        print("Wrong!")    else:        breakif __name__=="__main__":    import itertools    print (list(itertools.islice(fibo(),n)))


原创粉丝点击