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的框架下的web app的详细教程
Apr 30 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
Python中__slots__属性介绍与基本使用方法
Sep 05 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
python自动化之Ansible的安装教程
Jun 13 Python
python字典的常用方法总结
Jul 31 Python
python list多级排序知识点总结
Oct 23 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
Apr 27 Python
Python操作Elasticsearch处理timeout超时
Jul 17 Python
python 下载文件的几种方式分享
Apr 07 Python
使用python绘制分组对比柱状图
Apr 21 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取整数函数常用的四种方法小结
2012/07/05 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
2016/07/18 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
Python threading的使用方法解析
2019/08/28 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
酒店办公室文员岗位职责
2013/12/18 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
信息简报范文
2015/07/21 职场文书
六年级语文教学反思
2016/03/03 职场文书
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js