python递归实现汉诺塔实现
来源:互联网 发布:安卓手机plc编程软件 编辑:程序博客网 时间:2024/06/16 18:04
问题描述:古代有一个梵塔,塔内有三个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这n个盘子从A座移到B座。
要求:
但每次只能允许移动一个盘子
并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。
如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C,在移动过程中可以利用B座
要求打印移动的步骤。
因为刚学了python中的递归函数,这个题就是练习题,所以实现的方法很明显,要用到递归。
既然要用到递归,就必然要有一个递归的终止条件,比如:在阶乘函数fact(n)的递归中,终止条件为n=1。那么在汉诺塔中,递归的终止条件是什么?
经过手动画图,进行三个盘子的汉诺塔演示时,不难发现,当A座上只有一个盘子时,下一步的操作最为明显,不需要再有递归出现,即将这最后一个盘子,移动到C座上。所以,不难猜测,汉诺塔问题的递归终止条件即是A座上只有一个盘子。
那么是否可以对递归的终止条件,做如下猜测,即不再需要调用递归函数本身时即是递归的终止条件。(欢迎指正)
那么我们可以编写函数代码如下:
# -*- coding: utf-8 -*-def move(n, a, b, c): if n == 1: print('move', a, '->', c) else: move(n-1, a, c, b) move(1, a, b, c) move(n-1, b, a, c)
代码执行步骤如下
(套用一下python的格式)
当n=3:
#if条件不满足,执行else的语句,先执行第一句:
move(2,a,c,b)
当n=2:
move(1,a,c,b) 即 a—>b
move(1,a,b,c) 即 a—>c
move(1,b,a,c) 即 b—>c
#执行move(1,a,b,c)
move(1,a,b,c) 即 a —> c
#执行else的第三句
move(2,b,a,c)当n=2:
move(1,b,c,a) 即 b—>a
move(1,b,a,c) 即 b—>c
move(1,a,b,c) 即 a—>c
下面是运行结果
- python 递归实现 汉诺塔
- Python 递归实现汉诺塔
- Python递归实现汉诺塔
- python递归实现汉诺塔实现
- python实现汉诺塔(递归实现)
- Python实现递归函数:汉诺塔
- python实现递归算法
- Python 实现递归算法
- Python 实现递归生成器
- 阶乘python递归实现
- python 实现尾递归
- Python实现递归
- Python递归实现
- Python递归实现 easyui
- 递归实现汉诺塔问题(python)
- 递归经典案例汉诺塔 python实现
- 用Python递归实现汉诺塔问题
- python用递归实现汉诺塔问题
- 实用Jmeter录制复杂web测试脚本
- IdentityHashMap
- hdu 4717
- 基础宽搜 奶牛最少步数问题
- MFC消息映射机制概述(二)
- python递归实现汉诺塔实现
- java设计模式1(转自:http://blog.csdn.NET/zhangerqing)
- pro JPA2 精通java持久化API 第四章
- SSL认证原理
- 阶乘之和
- FZU—2150 Fire Game
- 安联支付-专业的第三方支付
- 各个版本的快速排序源码
- spring的事务配置