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简单删除目录下文件以及文件夹的方法
May 27 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
Python实现结构体代码实例
Feb 10 Python
Django分组聚合查询实例分享
Apr 29 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
python利用pytesseract 实现本地识别图片文字
Dec 14 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
Feb 03 Python
python计算列表元素与乘积详情
Aug 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
咖啡常见的种类
2021/03/03 新手入门
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
js同时按下两个方向键
2007/12/01 Javascript
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
jquery.validate表单验证插件使用方法解析
2016/11/07 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
使用python为mysql实现restful接口
2018/01/05 Python
Python并行分布式框架Celery详解
2018/10/15 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
简单英文演讲稿
2014/01/01 职场文书
父亲生日宴会答谢词
2014/01/10 职场文书
创建服务型党组织实施方案
2014/02/25 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
文明单位创建材料
2014/12/24 职场文书
爱的教育观后感
2015/06/17 职场文书