分别用的列表,递归,生成器三种方式创建出n个元素的斐波那契数列(Python3实现)

费波那契数列意大利语:Successione di Fibonacci),又译为费波拿契数斐波那契数列费氏数列黄金分割数列

数学上,费波那契数列是以递归的方法来定义:

  • {\displaystyle F_{0}=0}F_{0}=0
  • {\displaystyle F_{1}=1}F_{1}=1
  • {\displaystyle F_{n}=F_{n-1}+F_{n-2}}F_{n}=F_{{n-1}}+F_{{n-2}}(n≧2)

用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就是由之前的两数相加而得出。首几个费波那契系数是:

01123581321345589144233……(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()

 

posted @ 2017-03-28 01:18  maoguy  阅读(763)  评论(0编辑  收藏  举报