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和pyqt实现360的CLable控件
Feb 21 Python
Python实现在Linux系统下更改当前进程运行用户
Feb 04 Python
python在linux系统下获取系统内存使用情况的方法
May 11 Python
Python匹配中文的正则表达式
May 11 Python
Python 爬虫图片简单实现
Jun 01 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
Python使用pyautocad+openpyxl处理cad文件示例
Jul 11 Python
django 数据库 get_or_create函数返回值是tuple的问题
May 15 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
python正则表达式的懒惰匹配和贪婪匹配说明
Jul 13 Python
django filter过滤器实现显示某个类型指定字段不同值方式
Jul 16 Python
Python+OpenCV图像处理——图像二值化的实现
Oct 24 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之第八天
2006/10/09 PHP
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
利用javascript查看html源文件
2006/11/08 Javascript
简明json介绍
2008/09/28 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
电信专业毕业生推荐信
2013/11/18 职场文书
客房主管岗位职责
2013/12/09 职场文书
体育专业学生自我评价范文
2014/01/17 职场文书
优秀信贷员先进事迹
2014/01/31 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
车间安全生产标语
2014/06/06 职场文书
法定授权委托证明书
2014/09/27 职场文书
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python
python中的random模块和相关函数详解
2022/04/22 Python