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中%r和%s的详解及区别
Mar 16 Python
Python排序搜索基本算法之选择排序实例分析
Dec 09 Python
python pygame模块编写飞机大战
Nov 20 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
python的依赖管理的实现
May 14 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
Python如何使用27行代码绘制星星图
Jul 20 Python
python线程里哪种模块比较适合
Aug 02 Python
Pycharm配置autopep8实现流程解析
Nov 28 Python
PyTorch 中的傅里叶卷积实现示例
Dec 11 Python
基于PyInstaller各参数的含义说明
Mar 04 Python
Python基础之hashlib模块详解
May 06 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操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
有关PHP中MVC的开发经验分享
2012/05/17 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
2019/11/13 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
详解Python Socket网络编程
2016/01/05 Python
python中logging库的使用总结
2017/10/18 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
python字典改变value值方法总结
2019/06/21 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
速比涛英国官网:Speedo英国
2019/07/15 全球购物
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
社区七一党员活动方案
2014/01/25 职场文书
批评与自我批评材料
2014/02/15 职场文书
教师自我鉴定范文
2014/03/20 职场文书
李强感恩观后感
2015/06/17 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis