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如何import文件夹下的文件(实现方法)
Jan 24 Python
django使用图片延时加载引起后台404错误
Apr 18 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
python简单商城购物车实例代码
Mar 15 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
python单例模式的多种实现方法
Jul 26 Python
Django框架 信号调度原理解析
Sep 04 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
PyTorch中的C++扩展实现
Apr 02 Python
基于python实现删除指定文件类型
Jul 21 Python
Python绘图之柱形图绘制详解
Jul 28 Python
用Python生成会跳舞的美女
Jan 18 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中英混合字符串截取函数代码
2011/07/17 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
用cssText批量修改样式
2009/08/29 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
Bootstrap源码解读导航(6)
2016/12/23 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
mysql 之通过配置文件链接数据库
2017/08/12 Python
python人民币小写转大写辅助工具
2018/06/20 Python
python修改字典键(key)的方法
2019/08/05 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
Python sublime安装及配置过程详解
2020/06/29 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
医学生临床实习自我评价
2014/03/07 职场文书
新学期标语
2014/06/30 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
五年级学生评语大全
2014/12/26 职场文书
倡议书怎么写?
2019/04/11 职场文书
Python time库的时间时钟处理
2021/05/02 Python
Go 语言中 20 个占位符的整理
2021/10/16 Golang
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis
Redis唯一ID生成器的实现
2022/07/07 Redis