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实现图片批量剪切示例
Mar 25 Python
Python FTP操作类代码分享
May 13 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
Python selenium实现微博自动登录的示例代码
May 16 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
python3使用matplotlib绘制散点图
Mar 19 Python
Python安装与基本数据类型教程详解
May 29 Python
django 数据库连接模块解析及简单长连接改造方法
Aug 29 Python
pandas分批读取大数据集教程
Jun 06 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
Django数据模型中on_delete使用详解
Nov 30 Python
python从ftp获取文件并下载到本地
Dec 05 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
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
js防止表单重复提交实现代码
2012/09/05 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
Django开发中的日志输出的方法
2018/07/02 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
德国健康生活方式网上商店:Landkaufhaus Mayer
2019/03/12 全球购物
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
财务主管自我鉴定
2014/01/17 职场文书
运动会通讯稿200字
2014/02/16 职场文书
给老婆的保证书范文
2014/04/28 职场文书
举起手来观后感
2015/06/09 职场文书
详解Python中的for循环
2022/04/30 Python