关于递归函数:

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

以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递归函数和河内塔问题的更多相关文章

  1. python—递归函数

    递归函数 定义:即在函数定义中自己调用自己 递归就是在过程或函数中自我调用 递归必须有递归出口,即递归结束条件 举个栗子-阶乘: def fact(n): if n == 1: return 1 re ...

  2. Python之汉诺塔递归运算

    汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆 ...

  3. 汉诺塔(河内塔)算法 ----C语言递归实现

    汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子, 在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺 ...

  4. python解决汉诺塔问题

    今天刚刚在博客园安家,不知道写点什么,前两天刚刚学习完python 所以就用python写了一下汉诺塔算法,感觉还行拿出来分享一下 首先看一下描述: from :http://baike.baidu. ...

  5. 【学习】Python解决汉诺塔问题

    参考文章:http://www.cnblogs.com/dmego/p/5965835.html   一句话:学程序不是目的,理解就好:写代码也不是必然,省事最好:拿也好,查也好,解决问题就好!   ...

  6. python 实现汉诺塔

    汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘. 大梵天命令婆罗门把圆盘从下面开始按大小顺 ...

  7. 河内塔(hanoi)

    理论: 河内塔: 1.有三根杆子A,B,C.A杆上有若干碟子 2.每次移动一块碟子,小的只能叠在大的上面 3.把所有碟子从A杆全部移到C杆上   讲解: 设A上有n个盘子.如果n=1,则将圆盘从A直接 ...

  8. python实现汉诺塔移动

    汉诺塔问题 汉诺塔是根据一个传说形成的一个问题.汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大 ...

  9. python 游戏 —— 汉诺塔(Hanoita)

    python 游戏 —— 汉诺塔(Hanoita) 一.汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆 ...

随机推荐

  1. Zookeeper的缺点

    工作中对Zookeeper都是间接比较浅的使用,性能也没太高的要求所以对它的缺点也没太深的认识,从网上评价看,它还是有不少问题的. 1. 原生客户端坑太多,Curator(Curator是Netfli ...

  2. C++中list的用法总结

    list简介 list 也是顺序容器的一种.只是list 是一个双向链表.使用 list 需要包含头文件 list.双向链表的每个元素中都有一个指针指向后一个元素,也有一个指针指向前一个元素,如下图所 ...

  3. 第09组 Alpha事后诸葛亮

    组长博客链接 组长博客 参考邹欣老师的问题模板进行总结思考 设想和目标(2分) 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决的问题 我们软件初期旨在解决 ...

  4. grpc使用记录(一) gRPC编译(mscv/gcc)

    目录 1.编译前的准备工作 2.Windows下使用VS2019编译 2.1.使用cmake生成VS2019解决方案 2.2.使用msbuild工具进行编译 3.linux下编译 3.1 CentO ...

  5. apache Request-URI Too Large 处理办法

    在Apache的httpd.conf配置文件中(直接加就可以) LimitRequestLine 40940 LimitRequestFieldSize 40940

  6. 阻止Bootstrap 模态框点击背景空白处自动关闭

    问题描述 模态框点击空白处,会自动关闭,怎么阻止关闭事件呢? 解决方法 在HTML页面中编写模态框时,在div初始化时添加属性 aria-hidden=”true” data-backdrop=”st ...

  7. [原]使用global mapper 修改影像数据DOM的投影变换(将数据转换成osgearth支持的投影)

    osgearth默认使用的投影基准面为: Geographic(Latitude/Longitude)的 WGS84 有这样一份数据需要修改: 1.在菜单栏种选择“工具”---->“配置” 2. ...

  8. Fiddler抓包Fiddler过滤

    1.User Fiters启用 2.Action Action:Run Filterset now是否运行,Load Filterset加载,Save Filterset保存: 3.Hosts过滤 Z ...

  9. PMP 第9~10章错题总结

    1.组织分解结构把组织中的部门与项目中的工作包联系起来2.管理项目团队时应该使用冲突管理3.职责分配矩阵(RAM)显示了分配给每个工作包的项目资源,用于说明工作包或活动与项目团队成员之间的关系.而RA ...

  10. Android File Transfer Mac: 如何在 macOS 和 Android 系统之间移动数据

    三大 Mac OS X 系统 Android 文件传输软件 谷歌出品的 Android File Transfer 如何在 Mac 系统上使用 Android File Transfer Androi ...