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程序中自定义异常的方法
Oct 16 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
python进阶_浅谈面向对象进阶
Aug 17 Python
Python使用zip合并相邻列表项的方法示例
Mar 17 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
Flask框架钩子函数功能与用法分析
Aug 02 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
Python实现动态给类和对象添加属性和方法操作示例
Feb 29 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
Pandas之read_csv()读取文件跳过报错行的解决
Apr 21 Python
python获取响应某个字段值的3种实现方法
Apr 30 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)
2013/06/21 PHP
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
2013/06/08 Javascript
详解JS函数重载
2014/12/04 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
JS动画定时器知识总结
2018/03/23 Javascript
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
谈谈Python中的while循环语句
2019/03/10 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
python验证身份证信息实例代码
2019/05/06 Python
python实现自动化上线脚本的示例
2019/07/01 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
2019/08/06 Python
多个python文件调用logging模块报错误
2020/02/12 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
HashMap和Hashtable的区别
2013/05/18 面试题
英文简历中的自我评价用语
2013/12/09 职场文书
校园招聘策划书
2014/01/09 职场文书
物业总经理岗位职责
2014/02/28 职场文书
美容院店长岗位职责
2014/04/08 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
建房合同协议书
2016/03/21 职场文书
利用Java连接Hadoop进行编程
2022/06/28 Java/Android