利用递推思想解决汉诺塔问题

本文详细介绍了如何利用递推思想解决汉诺塔问题。通过将问题分解为移动(N - 1)个物块到中间杆,再移动第N个物块到目标杆,最后将剩余物块从中间杆移动到目标杆的过程,逐步解决整个问题。通过这样的递归步骤,实现了从A杆到C杆的所有物块转移。
摘要由CSDN通过智能技术生成

利用递推思想解决汉诺塔问题

汉诺塔问题是一个比较经典的利用递推思想来解决的问题。在这里插入图片描述
这是一张来自百度百科的一张图片。
我们需要利用B杆将A杆上的所有东西放到C杆上面。而且放置事物的时候只能是大的在下面,小的在上面。每一次移动只能移动一个物块。
我们假设有N个物块在A杆子上面。为了保证把全部的N个物块放到C杆子上去,我们就必须先让第N块放到C杆子的最下面。这样才能保证所有物块保证,下面的永远比上面的大。
那我们在移动第N块的时候,(N — 1)个物块必须先暂时放到B杆子处。
我们依次往上类推,(N — 1)这个物块为了放到C杆子上时,(N — 2)个物块就必须放到B杆上。以此往复,第二个物块为了放到C杆子上,第一个物块就必须先放到B杆子上。
第二个物块放好之后,第三个物块也想去C杆子上,第二个物块只能利用A杆让自己从C杆子放到B杆子。
至于怎么放,我们只需要把第B上的第一物块放到A上,第2物块就能放到B杆子上面了。第一物块放到B杆子上面。(这个步骤我们不必体现在代码上,我们只需要知道,我们借用A杆,将C杆子上的东西放到B杆子上。)
那我们持续好上面的步骤之后,我们发现,前(N — 1)个物块全部都在B杆子上面了。那我们就要把A杆子上的第N个物块放到C杆子上。之后,我们遇到的问题就是,怎么把B杆子上的(N — 1)个物块放到C杆子上去。
那我们可以想象&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值