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获取beautifulphoto随机某图片代码实例
Dec 18 Python
Python实现求最大公约数及判断素数的方法
May 26 Python
python中json格式数据输出的简单实现方法
Oct 31 Python
python selenium自动上传有赞单号的操作方法
Jul 05 Python
Sanic框架流式传输操作示例
Jul 18 Python
python实现随机梯度下降法
Mar 24 Python
python求最大值,不使用内置函数的实现方法
Jul 09 Python
深入了解Python iter() 方法的用法
Jul 11 Python
python django生成迁移文件的实例
Aug 31 Python
Python编写一个验证码图片数据标注GUI程序附源码
Dec 09 Python
python中os包的用法
Jun 01 Python
使用python创建股票的时间序列可视化分析
Mar 03 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
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
Python装饰器用法实例总结
2018/02/07 Python
python3.7.0的安装步骤
2018/08/27 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
C&A巴西网上商店:时尚、衣服、手机和鞋子
2020/06/07 全球购物
sealed修饰符是干什么的
2012/10/23 面试题
四种会话跟踪技术
2015/05/20 面试题
学生个人的自我评价分享
2013/11/05 职场文书
实验室的标语
2014/06/20 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
党员评议个人总结
2014/10/20 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript