递归应用之汉诺塔问题Python

本文探讨了汉诺塔问题的递归解决方案,通过分解问题规模,将移动多个碟子的问题转化为移动更少碟子的问题,以此解决递归经典问题。通过实例解释了如何使用递归思路解决3个、5个甚至更多个碟子的汉诺塔问题。
摘要由CSDN通过智能技术生成

递归应用之汉诺塔问题

汉诺塔问题,源于一个印度传说,一位神僧在寺庙里有三个柱子,一个柱子上有64个圆形碟子,要求把64个碟子移动到第三个柱子上,每次只能移动一个碟子,并且小碟子只能在大碟子上面。移动完成之后就是世界末日。

其实这个问题,如果是64个碟子,需要移动 2^64-1 次,如果每秒移动一次,需要5千亿多年。那时候世界末不末日就不得而知了。那么简化一下,如果移动3个碟子呢,5个,7个等等?该怎么求解呢?

汉诺塔问题可以说是递归中的经典问题了,横向切割问题,将数据集划分成小的规模进而求解。和分治法不同,分治法是纵向切割,将求解步骤分割(当然数据集也相应减少了,但不是主观减少的),和动态规划也不同。

一种角度理解,如果只有一个盘子,那直接移动就可以。如果有两个,先把上面一个移动到中间柱子,再把下面那个移动到最终柱子,最后吧中间柱子上的那个移动到最终柱子。那么如果是3个盘子呢?先将上面两个看成一个小盘子,将这个盘子移动到中间柱子,再将最下面的那个移动到最终柱子,最后将小盘子移动到最终柱子。那么如何将两个盘子移动到中间柱子呢?其实就相当于规模为2个盘子的汉诺塔问题了,并且起始柱子,中间柱子,最终柱子发生了变化。

假设移动5个盘子,另一个思路是:先把上面四个移动到中间柱子,再把最后一个(最大的一个)移动到最终柱子,最后再把上面四个盘子移动到最终柱子上。那么上面四个盘子怎么一下子移动到中间柱子呢?可以先把

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值