python打印斐波拉契数列
什么是斐波拉契数列?
斐波那契数列指的是这样一个数列“ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368...”这个数列从第3项开始,每一项都等于前两项之和。
利用递归实现斐波拉契数列
def outer_fib(n):def fib(x):if x<=2:return 1else:return fib(x-2)+fib(x-1)for i in range(1,n+1):print(fib(i),',',end='')
outer_fib(10)
上述代码从第三项开始,递归调用函数。递归的过程分为两个阶段:【1.回溯 2.递推】,回溯的阶段是一层一层往下调用,递推是一层一层返回,但是这种方法如果项数越多,效率会越低,因为回溯阶段的调用次数随着数列位数增加成指数级增长。
上述代码打印结果,注意这里演示的数列的第一项是从1开始的:
顺序输出
设置初始值,第一项为0,第二项为1,根据数列特性,当前项是前两项相加,顺序计算出斐波拉契数列
num = int(input("你希望生成几项?\n"))# 第一和第二项
n1 = 1
n2 = 1
count = 2if num <= 0:print("请输入一个正整数。")
elif num == 1:print("斐波那契数列:")print(n1)
else:print("斐波那契数列:")print(n1, ",", n2, end=" , ")while count < num:nth = n1 + n2print(nth, end=" , ")n1 = n2n2 = nthcount += 1
上述代码输出结果是:
使用reduce函数实现
reduce函数介绍
python2中reduce是内置函数,python3中该函数被移动到了functools中,使用时需要手动导入该模块。
reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
解释:reduce函数有三个参数
1.function:接收两个参数的函数,必选
2.sequence:元组、列表等可迭代的对象,必选
3.inital:初始值,可选
reduce函数的工作机制:
把sequence中的第一个和第二个参数传入function进行运算,返回值与sequence中第三个元素再次传入function运算,反复执行,直到sequence中元素迭代完成。如果传入了inital参数,传入function中的第一个参数就是inital的值,如果inital传入的是可迭代的对象,那么第一个和第二个参数就从inital中取到。
下面是实现代码:
from functools import reduce
def nihao(prev,b):print(prev[0],',',end="")return [ prev[1],prev[0] + prev[1] ]def fib_reduce(n):initial = [0, 1]dummy = range(n)fib_n = reduce(nihao,dummy,initial)return fib_n[0](fib_reduce(10))
打印结果:
上述代码中,参数b是为了控制斐波拉契数列的位数,每运行一次function(nihao)函数,dummy可迭代对象的值就会往后移动一位,它并不参与实际运算。当最后一次传入参数9的时候,数列产生至10位,整个函数退出完成打印。
python打印斐波拉契数列相关推荐
- Python程序-打印斐波拉契数列
这个程序的输出从第0项开始,输出到指定的项为止. 程序如下: # 打印斐波拉契数列 iterations = int(input("Number of iterations: ") ...
- C案例:打印斐波拉契数列
C案例:打印斐波拉契数列 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)= ...
- Python 探讨斐波拉契数列模素数的周期问题
Python 探讨斐波拉契数列模素数的周期问题之目录 前言 一.生成斐波拉契数列 二.创建素数列表 三.搜索周期数列的循环节 3.1 斐波拉契数列模 p p p 的周期 3.2 循环节的搜寻代码 3. ...
- Python输出斐波拉契数列
斐波拉契数列 1.什么是斐波拉契数列 2.用Python代码输入数列前30项 遇到问题不要迷茫,多思考,多问,这样你才能越发优秀 1.什么是斐波拉契数列 斐波那契数列(Fibonacci sequen ...
- JAVA中打印斐波拉契数列_java打印斐波那契数列
每行 5 个,输出斐波那契数列的前 20 个数字 6. 编写程序接受用户输入一个... 3 ? 这一公式输出斐波那契数列中的前 40 个数. 保存文件名为:bnds11.java class bnds ...
- 斐波拉契数列python写法
文章目录 第一种:递推方法 第二种:递归方式 第三种:用一个类写出比较全面的斐波拉契 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonard ...
- 【斐波拉契数列】 Python
[斐波拉契数列:这个数列从第三项开始,每一项都等于前两项之和] 题目内容:已知斐波拉契数列的前两项都是1, 我们定义求斐波拉契数列的第n项(n<=50)的函数为fbnq,程序主体如下:n=int ...
- 递归与递推 输出斐波拉契数列的前n项 python
输出斐波拉契数列的前n项 python 递归与递推 文章目录 输出斐波拉契数列的前n项 python 题设 题解 题设 以下数列 0 1 1 2 3 5 8 13 21 - 被称为斐波纳契数列. 这个 ...
- [python]练习之递归和循环实现斐波拉契数列
1 # 程序功能:用递归和循环实现斐波拉契数列 2 # 0 1 1 2 3 5 8 13 21 34 3 4 def digui_fibo(number): 5 if number == 1: 6 r ...
最新文章
- 【蓝桥java】递归基础之振兴中华
- 关于图片轮播的几种思路
- 【错误记录】集成 Tinker 热修复报错 ( No such property: variantConfiguration for class: .ApplicationVariantData )
- vue中比较完美请求的栗子(使用 axios 访问 API)
- 监测linux一些重要文件md5值脚本
- 存储过程——介绍(一)
- 事务的四大特性和隔离级别
- Android测试——在Python中如何将Windows程序前台显示
- java数组程序_java数组
- STM32cubemx教程及STM32入门(三)定时器
- 一文读懂配置管理(CM)
- 整理常用的PHP函数
- 跨品种套利 - 期货
- 大数据可视化 课堂笔记-1
- 方舟手游非官方服务器修改器,方舟非官方服务器作弊码 | 手游网游页游攻略大全...
- 流媒体技术学习笔记之(十七)FFmpeg 3.3《希尔伯特》-新版本的亮点
- 中国科学院计算机博士范,范可(中科院研究员)_百度百科
- スーパーフィルター プライバシーポリシー
- Python lambda表达式及用法
- Vue项目如何动态设置路由meta信息中的title属性值