{每日一题}:四种方法实现打印feibo斐波那契数列
刚开始学Python的时候,记得经常遇到打印斐波那契数列了,今天玩玩使用四种办法打印出斐波那契数列
方法一:使用普通函数
def feibo(n):
"""
打印斐波那契数列
:param n: 输入要打出多少项
"""
count = 0 # 定义一个计数器
num1, num2 = 0, 1 # 定义前2项 0,1
while count < n:
print(num1, end=" ")
num1, num2 = num2, num1 + num2
count += 1 feibo(10) 结果如下:
0 1 1 2 3 5 8 13 21 34
进程已结束,退出代码 0
方法二:使用递归输出斐波那契数列
def recur_feibo(n):
"""递归函数输出斐波那契数列"""
if n <= 1:
return n
else:
return (recur_feibo(n - 1) + recur_feibo(n - 2)) # 获取用户输入
total_num = int(input("请输入要打印的项数:"))
if total_num < 0:
print("请输入大于0的整数!")
else:
for i in range(total_num):
print(recur_feibo(i),end=" ") 结果如下:
请输入要打印的项数:10
0 1 1 2 3 5 8 13 21 34
进程已结束,退出代码 0
方法三:自己造一个斐波那契数列迭代器
class FeiBO(object):
"""斐波那契数列迭代器""" def __init__(self, n):
self.n = n
self.counter = 0 # 迭代器的指针初始默认指向 0 # 数列的前两项 0 ,1
self.num1 = 0
self.num2 = 1 def __iter__(self):
return self def __next__(self):
if self.counter < self.n:
temp = self.num1
self.num1, self.num2 = self.num2, self.num1 + self.num2
self.counter += 1
return temp
else:
raise StopIteration n = int(input("请输入要打印的项数:")) # 创建迭代器
feibo = FeiBO(n) # 使用for 迭代
fib1 = FeiBO(n)
for item in feibo:
print(item, end=" ") 结果如下:
请输入要打印的项数:10
0 1 1 2 3 5 8 13 21 34
进程已结束,退出代码 0
方法四:使用yield实现生成器求斐波那契数列
def feibo(n):
"""使用yield实现生成器求斐波那契数列"""
count = 0 # 记录当前迭代的位置,初始值为0
num1, num2 = 0, 1 # 初始化数列的前两位值 0,1
while count < n:
yield num1
num1, num2 = num2, num1 + num2
count += 1 # 自加一,迭代器指针指向下一个位置 n = int(input("请输入要打印的项数:")) # 创建生成器,生成器默认是沉睡的,假如是第一次唤醒生成器(函数),则从生成器(函数)的起始位置开始运行
gen = feibo(n) # 使用for 迭代
for item in gen:
print(item, end=" ") 结果如下:
请输入要打印的项数:10
0 1 1 2 3 5 8 13 21 34
进程已结束,退出代码 0
如果你和我有共同爱好,我们可以加个好友一起交流!

{每日一题}:四种方法实现打印feibo斐波那契数列的更多相关文章
- 方法输出C++输出斐波那契数列的几种方法
PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, ...
- Javascript数组求和的方法总结 以及由斐波那契数列得到的启发
一次面试中,面试官要求用三种不同的Javascript方法进行一个数字数组的求和,当时思来想去只想到了使用循环这一种笨方法,因此面试比较失败,在这里总结了六种Javascript进行数组求和的方法,以 ...
- Python初学者笔记:打印出斐波那契数列的前10项
问题:斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.- ...
- 斐波那契数列的5种python实现写法
斐波那契数列的5种python写法 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖 ...
- 使用并行的方法计算斐波那契数列 (Fibonacci)
更新:我的同事Terry告诉我有一种矩阵运算的方式计算斐波那契数列,更适于并行.他还提供了利用TBB的parallel_reduce模板计算斐波那契数列的代码(在TBB示例代码的基础上修改得来,比原始 ...
- JS高级. 06 缓存、分析解决递归斐波那契数列、jQuery缓存、沙箱、函数的四种调用方式、call和apply修改函数调用方法
缓存 cache 作用就是将一些常用的数据存储起来 提升性能 cdn //-----------------分析解决递归斐波那契数列<script> //定义一个缓存数组,存储已经计算出来 ...
- 斐波那契数列-java编程:三种方法实现斐波那契数列
题目要求:编写程序在控制台输出斐波那契数列前20项,每输出5个数换行 斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 这个数列 ...
- 实现斐波拉契数列的四种方式python代码
斐波那契数列 1. 斐波拉契数列简介 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引 ...
- Python中斐波那契数列的四种写法
在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,“你学过数据结构吗?”我略略点一点头 ...
随机推荐
- ES6新增常见特性
一:声明属性let const var let const 区别 1.var声明变量会发生变量提升,let.const不会发生变量提升 2.var允许重复声明变量,let不可以 3.const声明变量 ...
- Java 集合转换(数组、List、Set、Map相互转换)
package com.example.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Hash ...
- linux 堆栈查看
top -c 查看进程ID pstree PID 查看线程树 pstack PID 查看堆栈
- smartbits国产版本minismb – windows 10 用户界面无法正常显示
Minismb测试仪表是复刻smartbits的国产版本,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具测试任何ip网络设备的端口吞吐率,带宽,并发连接数和 ...
- Flask关于request一些方法和属性的整理(持续更新)
前提:基于纯后端服务, post 请求 (Content-Type: application/json,) 1.获取未经处理过的原始数据而不管内容类型,如果数据格式是json的,则取得的是json字符 ...
- NABCD分析 [团队任务]
N(Need,需求) 学校有许多闲置的自己用不着或者想出手的二手物品,加群发消息寻找物品太过繁琐,同样兼职信息在QQ群混杂在一起尤为不便.因此我们打算做一个专门发布信息的App.包括发布闲置物品,兼职 ...
- [Job] 找工作小结
有近2个月没有更新博客,主要精力放在了投递会议论文和秋招找工作方面.这里简单总结一下秋招笔试面试的几点建议和感受. 投递的NLP算法工程师岗位,主要参加过面试的公司有腾讯(春招),蚂蚁金服(春招),追 ...
- 12.Django基础十之Form和ModelForm组件
一 Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户 ...
- python 虚拟环境配置
刚学习 python 的同学经常会遇到一个问题: 已经安装了特定的包或者第三库,但是 pycharm 总是提示没有找到.
- ELK 学习笔记之 elasticsearch Bulk操作
Bulk操作: Bulk操作用于批量插入数据: 请求体格式: 编辑一个文件:(插入2个新的文档) curl -XPOST 'http://192.168.1.151:9200/library/book ...