分别用的列表,递归,生成器三种方式创建出n个元素的斐波那契数列(Python3实现)
费波那契数列(意大利语:Successione di Fibonacci),又译为费波拿契数、斐波那契数列、费氏数列、黄金分割数列。
- {\displaystyle F_{0}=0}
- {\displaystyle F_{1}=1}
- {\displaystyle F_{n}=F_{n-1}+F_{n-2}}(n≧2)
用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就是由之前的两数相加而得出。首几个费波那契系数是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……(OEIS中的数列A000045)
特别指出:0不是第一项,而是第零项。
1 #!/usr/bin/python3 2 #_*_coding:utf-8_*_ 3 4 #非递归的方式生成长度为n的斐波那契数列 5 def createFib1 (n) : 6 L = [0] ; 7 i , a , b = 0 , 0 , 1 ; 8 while i < n : 9 L.append (b) ; 10 a , b = b , a + b ; 11 i = i + 1 ; 12 return L ; 13 14 #递归的方式生成斐波那契数列中的第n个元素 15 def fib2 (n) : 16 if n <= 0 : 17 return 0 ; 18 elif n <= 2 : 19 return 1 ; 20 else : 21 return fib2(n-1) + fib2(n-2) 22 23 #调用递归函数生成斐波那契数列 24 def createFib2 (n) : 25 L = [] ; 26 i = 0 ; 27 while i <= n : 28 L.append (fib2(i)) ; 29 i = i + 1 ; 30 return L ; 31 32 #generator的方法逐个生成斐波那契数列中的元素 33 def fib3 (n) : 34 yield 0 ; 35 i , a , b = 0 , 0 , 1 ; 36 while i < n : 37 yield b ; 38 a , b = b , a + b ; 39 i = i + 1 ; 40 41 #调用生成器函数生成斐波那契数列 42 def createFib3 (n) : 43 L = [] ; 44 for i in fib3(n) : 45 L.append (i) ; 46 return L ; 47 48 #主函数 49 def main () : 50 n = int(input("生成长度为n的斐波那契数列:")) ; 51 print ("fib1:") ; 52 print (createFib1(n)) ; 53 print ("fib2:") ; 54 print (createFib2(n)) ; 55 print ("fib3:") ; 56 print (createFib3(n)) ; 57 58 if __name__ == '__main__' : 59 main()