分别用的列表,递归,生成器三种方式创建出n个元素的斐波那契数列(Python3实现)
2017-03-28 01:18
941 查看
费波那契数列(意大利语: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()
相关文章推荐
- 斐波那契数列(Fibonacci sequence)Python实现的三种方案:列表 递归 生成器
- 详解python使用递归、尾递归、循环三种方式实现斐波那契数列
- 【python中二叉树的实现】python中二叉树的创建、三种方式递归遍历和非递归遍历
- 使用 Python 实现文件递归遍历的三种方式
- Python实现列表删除重复元素的三种常用方法分析
- 解析分别用递归与循环的方式求斐波那契数列的实现方法
- python创建列表和向列表添加元素的实现方法
- 二叉树三种遍历方式的递归与非递归实现
- 斐波那契数列的两种实现方式(递归(大于O(n方))和迭代(O(n))----网易笔试2013录
- 详细讲解二叉树三种遍历方式的递归与非递归实现
- 三种方式实现动态元素水平居中
- python列表删除重复元素的三种方法
- Python 列表 list 数据类型创建list、添加元素和删除元素
- 二叉树的建立以及三种遍历方式的递归、非递归的实现
- 宿主机为linux、windows分别实现VMware三种方式上网(转)
- 详细讲解二叉树三种遍历方式的递归与非递归实现
- 三种方式实现动态元素水平居中
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- 算法导论2.3-5答案 分别采用递归与非递归方式实现二分查找 c++实现
- 宿主机为linux、windows分别实现VMware三种方式上网