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标准库urllib2的一些使用细节总结
Mar 16 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
Sep 18 Python
python re模块的高级用法详解
Jun 06 Python
python requests 库请求带有文件参数的接口实例
Jan 03 Python
微信小程序python用户认证的实现
Jul 29 Python
浅谈Python 递归算法指归
Aug 22 Python
python要安装在哪个盘
Jun 15 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
Dec 03 Python
Python+Appium实现自动抢微信红包
May 21 Python
Python中seaborn库之countplot的数据可视化使用
Jun 11 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.ini中文版(2)
2006/10/09 PHP
PHP如何得到当前页和上一页的地址?
2006/11/27 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
js加解密 脚本解密
2008/02/22 Javascript
javascript prototype原型操作笔记
2009/12/07 Javascript
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
python利用beautifulSoup实现爬虫
2014/09/29 Python
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
详解python字节码
2018/02/07 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
python打包成so文件过程解析
2019/09/28 Python
详解Python绘图Turtle库
2019/10/12 Python
如何利用python进行时间序列分析
2020/08/04 Python
python 决策树算法的实现
2020/10/09 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
技能比武方案
2014/05/21 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
体育教师个人工作总结
2015/02/09 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android