浅析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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
python中函数传参详解
Jul 03 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
python实现一个简单的并查集的示例代码
Mar 19 Python
深入浅析Python的类
Jun 22 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
django中使用Celery 布式任务队列过程详解
Jul 29 Python
python实现抠图给证件照换背景源码
Aug 20 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
python 爬取豆瓣网页的示例
Apr 13 Python
Python 全局空间和局部空间
Apr 06 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中使用websocket详解
2016/09/23 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
Aptana调试javascript图解教程
2009/11/30 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
vue-router 按需加载 component: () => import() 报错的解决
2020/09/22 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
[01:46]新英雄登场
2019/09/10 DOTA
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
详细分析Python垃圾回收机制
2020/07/01 Python
Python如何读写字节数据
2020/08/05 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
JRE、JDK、JVM之间的关系怎样
2012/05/16 面试题
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
皮肤科医师岗位职责
2013/12/04 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
志愿者服务感言
2014/02/27 职场文书
销售员态度差检讨书
2014/10/26 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电
蓝牙耳机怎么连接电脑win11? Win11蓝牙耳机连接电脑的技巧
2023/01/09 数码科技