您的位置:首页 > 编程语言 > Python开发

抽象之汉诺塔问题(Python3)

2021-02-26 21:52 537 查看

汉诺塔问题:

       如图,有3根柱子,柱子A上有若干自上而下、由小到大的石盘,每次只允许移动1个石盘,石盘可以在ABC柱子上随意移动,移动过程中小的石盘必须在大的石盘上面,如何将A上的石盘按原样全部移动到C上。


Python3程序模拟:

       要用python3程序模拟这个移动步骤,首先要将这个问题分离-提取,也就是将问题的关键步骤抽象出来,好比我们的等差等比数列的求和公式。

假设A上只有1个石盘,那只需将石盘从A直接移动到C。

假设A上只有2个石盘,需要将小的石盘从A移动到B,然后将大的石盘从A移动到C,然后将小的石盘从B移动到C。

。。。。。。。

假设A上有64个石盘,我们无法想象,只能将问题逐步抽象,站到一个更高一些的角度去思考:

       因为每次移动,要求小的石盘必须在大的石盘上面,所以如果想将A上的石盘全部移动到C上,我们只能将A上的前63个石盘移动到B上,然后将A上最大的石盘移动到C上(这里和A上只有1个石盘是一样样的);

       现在A上没有石盘了,B上有63个石盘,C上有一个最大的石盘,现在C上的石盘可以扔掉了,最大的石盘已经成功转移,且任何其他石盘都比最大的石盘小,所以可以忽略不计了,问题转变为如何将B上的63个石盘,借助A,全部移动到C上(又回到了A上有64个石盘的命题);

 

Python3代码:


代码简要说明:

n->石盘的数量,a,b,c->3根被命名的柱子

如果n=1,只有1个石盘,从A借助B移动到C;

否则,将n-1的石盘从A移动到C,将第n个石盘(最大的那1个石盘)从A移动到C,将B上n-1个石盘从B借助A移动到C,完成。


抽象:

       我们将一个问题从假设到分离,到关键步骤提取,然后用程序模拟出问题的实现路径,这就是抽象的魅力。大家可以抽象一下8皇后问题。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: