浅析python递归函数和河内塔问题


Posted in Python onApril 18, 2017

关于递归函数:

函数内部调用自身的函数。

以n阶乘为例:

f(n) = n ! = 1 x 2 x 3 x 4 x...x(n-1)x(n) = n x (n-1) !

def factorial(n):
   if n==1:
     return 1
   return n * f(n-1)

//调用过程如下:

>>f(5)
>>5 * f(4)
>>5 * 4 * f(3)
>>5 * 4 * 3 * f(2)
>>5 * 4 * 3 * 2 * f(1)
>>5 * 4 * 3 * 2 * 1
>>120

从上面的例子可以直观得看到递归函数在不断的调用自己的函数,直到n==1(函数出口)。

关于河内塔:

规则:

1. 三根柱子,A,B, C

2. A 柱子上的盘子从小到大 排列,最上面的是最小的,最下面的是最大的。

3. 将A上的盘子移动到C上,移动过程中始终保持,最大的在下面,最小的在上面。

假设 A 柱子上有一个盘子,可以直接从A移动到C完成:

A --> C

假设 A 柱子上有两个盘子,需要借助B,移动到C:

A --> B

A --> C

B --> C

将A 最上面的盘(2-1)移动到B,然后将A中剩下一块盘移动到C,最后将B中的盘移动到C

假设 A 柱子上有三个盘子,需要借助B移动A 上面的两个盘,然后将A剩下最大的盘移动到C,最后将B中的盘移动到C。

A --> C

A --> B

C --> B  //这三步将A上前两个盘子移动到B

A --> C //这一步将A上最大的盘子移动到C

B --> A

B --> C

A --> C //后面这三步将B上的盘子移动到C

原理是将 A 上的(n-1) 块盘移动到B,然后A中剩下的,也是最大的一块盘移动到C,最后将B上(n-1)块盘移动到C。

def Hanoi(n , a, b, c):
  if n==1:
    print (" Hanoi Tower move", a, "-->", c)
    return
  Hanoi(n-1, a, c, b)
  Hanoi(1, a, b, c)
  Hanoi(n-1, b, a, c)
print (" When there is 1 ring on A")
Hanoi(1, 'A', 'B', 'C')
print (" When there are 2 rings on A")
Hanoi(2, 'A', 'B', 'C')
print (" When there are 3 rings on A")
Hanoi(3, 'A', 'B', 'C')
print(" When there are 4 rings on A")
Hanoi(4, 'A', 'B', 'C')

以上所述是小编给大家介绍的python递归函数和河内塔问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python极简代码实现杨辉三角示例代码
Nov 15 Python
Python中的连接符(+、+=)示例详解
Jan 13 Python
python版简单工厂模式
Oct 16 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
python中使用while循环的实例
Aug 05 Python
Python 函数绘图及函数图像微分与积分
Nov 20 Python
Python中join()函数多种操作代码实例
Jan 13 Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 Python
如何利用Python写个坦克大战
Nov 18 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 03 Python
Python使用正则表达式实现文本替换的方法
Apr 18 #Python
Python外星人入侵游戏编程完整版
Mar 30 #Python
Python随机数用法实例详解【基于random模块】
Apr 18 #Python
django使用图片延时加载引起后台404错误
Apr 18 #Python
使用Python3制作TCP端口扫描器
Apr 17 #Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 #Python
Python的时间模块datetime详解
Apr 17 #Python
You might like
php中数据的批量导入(csv文件)
2006/10/09 PHP
php基础知识:函数基础知识
2006/12/13 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
繁简字转换功能
2006/07/19 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
2016/05/14 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
python的常用模块之collections模块详解
2018/12/06 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
一款恶搞头像特效的制作过程 利用css3和jquery
2014/11/21 HTML / CSS
巴西手表购物网站:eclock
2019/03/19 全球购物
旅游管理专业学生求职信
2013/09/28 职场文书
护士自我鉴定范文
2013/10/06 职场文书
大学本科生的个人自我评价
2013/12/09 职场文书
党员个人思想汇报
2013/12/28 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
党员对照检查材料
2014/09/22 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书