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 26 Python
几个提升Python运行效率的方法之间的对比
Apr 03 Python
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
深入理解Django的中间件middleware
Mar 14 Python
使用python将时间转换为指定的格式方法
Nov 12 Python
python 用opencv调用训练好的模型进行识别的方法
Dec 07 Python
Python3实现的反转单链表算法示例
Mar 08 Python
关于python3.9安装wordcloud出错的问题及解决办法
Nov 02 Python
详解python3 GUI刷屏器(附源码)
Feb 18 Python
python通配符之glob模块的使用详解
Apr 24 Python
基于Python实现nc批量转tif格式
Aug 14 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
4.与数据库的连接
2006/10/09 PHP
php格式化金额函数分享
2015/02/02 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
JQuery中$之选择器用法介绍
2011/04/05 Javascript
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
浅述python中深浅拷贝原理
2018/09/18 Python
python实现各种插值法(数值分析)
2019/07/30 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
PHP如何自定义函数
2016/09/16 面试题
数学专业推荐信范文
2013/11/21 职场文书
国旗下演讲稿
2014/05/08 职场文书
档案保密承诺书
2014/06/03 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
小学见习报告
2014/10/31 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis