博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
{每日一题}:四种方法实现打印feibo斐波那契数列
阅读量:5058 次
发布时间:2019-06-12

本文共 2181 字,大约阅读时间需要 7 分钟。

刚开始学Python的时候,记得经常遇到打印斐波那契数列了,今天玩玩使用四种办法打印出斐波那契数列

方法一:使用普通函数

1 def feibo(n): 2     """ 3     打印斐波那契数列 4     :param n: 输入要打出多少项 5     """ 6     count = 0  # 定义一个计数器 7     num1, num2 = 0, 1  # 定义前2项   0,1 8     while count < n: 9         print(num1, end=" ")10         num1, num2 = num2, num1 + num211         count += 112 13 14 feibo(10) 结果如下:

0 1 1 2 3 5 8 13 21 34

进程已结束,退出代码 0

 

 

方法二:使用递归输出斐波那契数列

1 def recur_feibo(n): 2     """递归函数输出斐波那契数列""" 3     if n <= 1: 4         return n 5     else: 6         return (recur_feibo(n - 1) + recur_feibo(n - 2)) 7  8  9 # 获取用户输入10 total_num = int(input("请输入要打印的项数:"))11 if total_num < 0:12     print("请输入大于0的整数!")13 else:14     for i in range(total_num):15         print(recur_feibo(i),end=" ")16 17 18 结果如下:19 请输入要打印的项数:1020 0 1 1 2 3 5 8 13 21 34 21 进程已结束,退出代码 0

方法三:自己造一个斐波那契数列迭代器

1 class FeiBO(object): 2     """斐波那契数列迭代器""" 3  4     def __init__(self, n): 5         self.n = n 6         self.counter = 0  # 迭代器的指针初始默认指向 0 7  8         # 数列的前两项 0 ,1 9         self.num1 = 010         self.num2 = 111 12     def __iter__(self):13         return self14 15     def __next__(self):16         if self.counter < self.n:17             temp = self.num118             self.num1, self.num2 = self.num2, self.num1 + self.num219             self.counter += 120             return temp21         else:22             raise StopIteration23 24 25 n = int(input("请输入要打印的项数:"))26 27 # 创建迭代器28 feibo = FeiBO(n)29 30 # 使用for 迭代31 fib1 = FeiBO(n)32 for item in feibo:33     print(item, end=" ")34 35 36 结果如下:37 请输入要打印的项数:1038 0 1 1 2 3 5 8 13 21 34 39 进程已结束,退出代码 0

方法四:使用yield实现生成器求斐波那契数列

1 def feibo(n): 2     """使用yield实现生成器求斐波那契数列""" 3     count = 0  # 记录当前迭代的位置,初始值为0 4     num1, num2 = 0, 1  # 初始化数列的前两位值 0,1 5     while count < n: 6         yield num1 7         num1, num2 = num2, num1 + num2 8         count += 1  # 自加一,迭代器指针指向下一个位置 9 10 11 n = int(input("请输入要打印的项数:"))12 13 # 创建生成器,生成器默认是沉睡的,假如是第一次唤醒生成器(函数),则从生成器(函数)的起始位置开始运行14 gen = feibo(n)15 16 # 使用for 迭代17 for item in gen:18     print(item, end=" ")19 20 21 结果如下:22 请输入要打印的项数:1023 0 1 1 2 3 5 8 13 21 34 24 进程已结束,退出代码 0

 

 

如果你和我有共同爱好,我们可以加个好友一起交流!

 

转载于:https://www.cnblogs.com/ywk-1994/p/9458062.html

你可能感兴趣的文章
Educational Codeforces Round 46 (Rated for Div. 2)
查看>>
Abstract Factory Pattern
查看>>
C# 实现Bresenham算法(vs2010)
查看>>
基于iSCSI的SQL Server 2012群集测试(一)--SQL群集安装
查看>>
list 容器 排序函数.xml
查看>>
存储开头结尾使用begin tran,rollback tran作用?
查看>>
Activity启动过程中获取组件宽高的五种方式
查看>>
java导出Excel表格简单的方法
查看>>
SQLite数据库简介
查看>>
利用堆实现堆排序&amp;优先队列
查看>>
Mono源码学习笔记:Console类(四)
查看>>
Android学习路线(十二)Activity生命周期——启动一个Activity
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
windows下编译FreeSwitch
查看>>
git .gitignore 文件不起作用
查看>>
Alan Turing的纪录片观后感
查看>>
c#自定义控件中的事件处理
查看>>
App.config自定义节点读取
查看>>
unity3d根据手机串号和二维码做正版验证
查看>>