Python基于递归算法实现的汉诺塔与Fibonacci数列示例


Posted in Python onApril 18, 2018

本文实例讲述了Python基于递归算法实现的汉诺塔与Fibonacci数列。分享给大家供大家参考,具体如下:

这里我们通过2个例子,学习python中递归的使用。

1. 找出Fibonacci数列中,下标为 n 的数(下标从0计数)

Fibonacci数列的形式是这样的:0,1,1,2,3,5,8,13……

① 使用while循环,python2代码如下:

def fib(n):
  a,b=0,1
  count=0
  while count<n:
    a,b=b,a+b
    count=count+1
  print a

运行结果如下:

>>> fib(0)
0
>>> fib(1)
1
>>> fib(2)
1
>>> fib(3)
2
>>> fib(4)
3
>>> fib(5)
5

② 使用递归(递归必须要有边界条件),python2代码如下:

def fib(n):
  if n==0 or n==1:#递归的边界条件
    return n
  else:
    return fib(n-1)+fib(n-2)

运行结果如下:

>>> fib(0)
0
>>> fib(1)
1
>>> fib(2)
1
>>> fib(3)
2
>>> fib(4)
3
>>> fib(5)
5

递归是最能表现计算思维的算法之一,我们以f(4)为例,看一下递归的执行过程:

Python基于递归算法实现的汉诺塔与Fibonacci数列示例

同一程序,使用递归虽然程序简洁,但递归的执行效率要比循环低,系统的资源消耗比循环大。因为递归是一层一层地往里面调用,结束后又一层一层地返回,所以递归的执行效率并不高。那为什么还要使用递归呢?因为有一些问题,我们找不到非常明显的循环方案,但容易找到明显的递归方案。比如说著名的汉诺塔问题。

2. 汉诺塔

下图是一个简化版的汉诺塔游戏,只有4个盘子:

Python基于递归算法实现的汉诺塔与Fibonacci数列示例

汉诺塔游戏规则如下:

Python基于递归算法实现的汉诺塔与Fibonacci数列示例

python2代码如下:

def hanoi(a,b,c,n):
  if n==1:#递归结束条件
    print a,'->',c
  else:
    hanoi(a,c,b,n-1)
    print a,'->',c
    hanoi(b,a,c,n-1)

运行结果:

>>> hanoi('A','B','C',1)
A -> C
>>> hanoi('A','B','C',2)
A -> B
A -> C
B -> C
>>> hanoi('A','B','C',3)
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
对pandas处理json数据的方法详解
Feb 08 Python
Python中numpy模块常见用法demo实例小结
Mar 16 Python
python将字符串转换成json的方法小结
Jul 09 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
利用python生成照片墙的示例代码
Apr 09 Python
jupyter notebook读取/导出文件/图片实例
Apr 16 Python
浅谈Python中的生成器和迭代器
Jun 19 Python
Matplotlib 折线图plot()所有用法详解
Jul 28 Python
如何基于Python实现word文档重新排版
Sep 29 Python
python 删除列表里所有空格项的方法总结
Apr 18 #Python
python list删除元素时要注意的坑点分享
Apr 18 #Python
python爬虫之xpath的基本使用详解
Apr 18 #Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 #Python
python购物车程序简单代码
Apr 18 #Python
python list元素为tuple时的排序方法
Apr 18 #Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 #Python
You might like
PHP If Else(elsefi) 语句
2013/04/07 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
通过javascript把图片转化为字符画
2013/10/24 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
2015/03/03 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
小程序转发探索示例
2019/02/19 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
2020/06/01 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
Python3实现的简单验证码识别功能示例
2018/05/02 Python
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
《胡杨》教学反思
2014/02/16 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
助学金感谢信
2015/01/20 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
OpenCV实现反阈值二值化
2021/11/17 Java/Android
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技