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实现对比不同字体中的同一字符的显示效果
Apr 23 Python
Python出现segfault错误解决方法
Apr 16 Python
Python提取Linux内核源代码的目录结构实现方法
Jun 24 Python
Django admin美化插件suit使用示例
Dec 12 Python
浅谈使用Python内置函数getattr实现分发模式
Jan 22 Python
Python反爬虫技术之防止IP地址被封杀的讲解
Jan 09 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
python实现连连看辅助(图像识别)
Mar 25 Python
基于Python获取docx/doc文件内容代码解析
Feb 17 Python
浅析Python中字符串的intern机制
Oct 03 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 Python
Python Pygame实战在打砖块游戏的实现
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下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
php的4种常用运行方式详解
2016/12/22 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
php微信开发之关注事件
2018/06/14 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
2019/03/30 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
javascript 二维数组的实现与应用
2010/03/16 Javascript
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
微信小程序 传值取值的几种方法总结
2017/01/16 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
2019/05/23 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
详解Python中的多线程编程
2015/04/09 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
python实现五子棋人机对战游戏
2020/03/25 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
python访问hdfs的操作
2020/06/06 Python
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
一道SQL存储过程面试题
2016/10/07 面试题
个人对照检查材料
2014/02/12 职场文书
超市开店计划书
2014/09/15 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
导游词之任弼时故居
2020/01/07 职场文书