什么是斐波拉契数列?

斐波那契数列指的是这样一个数列“ 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打印斐波拉契数列相关推荐

  1. Python程序-打印斐波拉契数列

    这个程序的输出从第0项开始,输出到指定的项为止. 程序如下: # 打印斐波拉契数列 iterations = int(input("Number of iterations: ") ...

  2. C案例:打印斐波拉契数列

    C案例:打印斐波拉契数列 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)= ...

  3. Python 探讨斐波拉契数列模素数的周期问题

    Python 探讨斐波拉契数列模素数的周期问题之目录 前言 一.生成斐波拉契数列 二.创建素数列表 三.搜索周期数列的循环节 3.1 斐波拉契数列模 p p p 的周期 3.2 循环节的搜寻代码 3. ...

  4. Python输出斐波拉契数列

    斐波拉契数列 1.什么是斐波拉契数列 2.用Python代码输入数列前30项 遇到问题不要迷茫,多思考,多问,这样你才能越发优秀 1.什么是斐波拉契数列 斐波那契数列(Fibonacci sequen ...

  5. JAVA中打印斐波拉契数列_java打印斐波那契数列

    每行 5 个,输出斐波那契数列的前 20 个数字 6. 编写程序接受用户输入一个... 3 ? 这一公式输出斐波那契数列中的前 40 个数. 保存文件名为:bnds11.java class bnds ...

  6. 斐波拉契数列python写法

    文章目录 第一种:递推方法 第二种:递归方式 第三种:用一个类写出比较全面的斐波拉契 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonard ...

  7. 【斐波拉契数列】 Python

    [斐波拉契数列:这个数列从第三项开始,每一项都等于前两项之和] 题目内容:已知斐波拉契数列的前两项都是1, 我们定义求斐波拉契数列的第n项(n<=50)的函数为fbnq,程序主体如下:n=int ...

  8. 递归与递推 输出斐波拉契数列的前n项 python

    输出斐波拉契数列的前n项 python 递归与递推 文章目录 输出斐波拉契数列的前n项 python 题设 题解 题设 以下数列 0 1 1 2 3 5 8 13 21 - 被称为斐波纳契数列. 这个 ...

  9. [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 ...

最新文章

  1. 【蓝桥java】递归基础之振兴中华
  2. 关于图片轮播的几种思路
  3. 【错误记录】集成 Tinker 热修复报错 ( No such property: variantConfiguration for class: .ApplicationVariantData )
  4. vue中比较完美请求的栗子(使用 axios 访问 API)
  5. 监测linux一些重要文件md5值脚本
  6. 存储过程——介绍(一)
  7. 事务的四大特性和隔离级别
  8. Android测试——在Python中如何将Windows程序前台显示
  9. java数组程序_java数组
  10. STM32cubemx教程及STM32入门(三)定时器
  11. 一文读懂配置管理(CM)
  12. 整理常用的PHP函数
  13. 跨品种套利 - 期货
  14. 大数据可视化 课堂笔记-1
  15. 方舟手游非官方服务器修改器,方舟非官方服务器作弊码 | 手游网游页游攻略大全...
  16. 流媒体技术学习笔记之(十七)FFmpeg 3.3《希尔伯特》-新版本的亮点
  17. 中国科学院计算机博士范,范可(中科院研究员)_百度百科
  18. スーパーフィルター プライバシーポリシー
  19. Python lambda表达式及用法
  20. Vue项目如何动态设置路由meta信息中的title属性值

热门文章

  1. OpenCL入门实践
  2. 点菜系统中的命令模式
  3. 游戏开发者放心!Cocos引擎未感染XcodeGhost
  4. PBOC/EMV之文件结构
  5. 第四范式上市更进一步:再募资7亿美元,AI独角兽们陷亏损泥潭
  6. Nginx代理无法访问Nexus问题
  7. Exchange控制台错误:WinRM客户端已将请求发送到HTTP服务器
  8. Apache Zookeeper配置
  9. VMtools的安装教程
  10. IllegalArgumentException: wrong number of arguments