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使用PIL模块实现给图片打水印的方法
May 22 Python
Python中for循环和while循环的基本使用方法
Aug 21 Python
在Mac OS上搭建Python的开发环境
Dec 24 Python
在centos7中分布式部署pyspider
May 03 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
python xlsxwriter创建excel图表的方法
Jun 11 Python
python 列表中[ ]中冒号‘:’的作用
Apr 30 Python
Python进度条的制作代码实例
Aug 31 Python
Python笔记之facade模式
Nov 20 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
关于python爬虫应用urllib库作用分析
Sep 04 Python
Python与C++中梯度方向直方图的实现
Mar 17 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检查页面是否被百度收录
2015/10/28 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
Javascript !!的作用
2008/12/04 Javascript
一个简单的JavaScript 日期计算算法
2009/09/11 Javascript
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
基于Jquery实现表格动态分页实现代码
2011/06/21 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
2012/09/14 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
在Python中使用__slots__方法的详细教程
2015/04/28 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
本科生学习总结的自我评价
2013/10/02 职场文书
会计自我鉴定
2013/11/02 职场文书
班组长安全生产职责
2013/12/16 职场文书
安踏广告词改编版
2014/03/21 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
初中英语教学随笔
2015/08/15 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电
SQL Server删除表中的重复数据
2022/05/25 SQL Server
springboot实现string转json json里面带数组
2022/06/16 Java/Android