小言_互联网的博客

Python课后作业 1. 汉诺塔问题 ---- (第八次作业)

265人阅读  评论(0)


前引闲聊


这次的作业啊 我觉得就挺有意思的
尽管我觉得第二个那个分治法找硬币题目真的好蠢好蠢好蠢
具体蠢在哪里我就在分治法找硬币那道题讲

我记得之前我上学期
我就看到了这个汉诺塔问题
但当时确实水平有限 再加上放寒假了
就🕊 🕊 🕊 鸽掉惹

没想到这次的题就布置了汉诺塔
那顺带这次把汉诺塔问题解决了


汉诺塔博客分析


当看到这类问题 其实第一个思路就应该是递归解决
汉诺塔精讲部分我放一个博客链接 确实讲的很清楚很好
但需要本身有递归的基础 + 一部分的灵性

图解汉诺塔问题(递归求解)

这篇博客我认为已经通俗到封顶了
如果真的想搞懂这类问题可以自己先去玩半个小时的汉诺塔小游戏
再加上自己去读读博客
就差不多了


原题题目



代码实现


提交代码需要把注释部分给删掉 不然会出错
注释部分解读代码


count = 1 #设置全局变量 方便记录步骤数

#A为目前所在区域 B为工具人区域 C为目标移动区
#A B C可类化为3个相邻的柱子
def HanNuoTa(num,A,B,C):
    global count #全局变量声明
    if(num == 0):return #递归完成结束条件

	#这里我设置的意思就是移动了最底部以上的块
	#这里三个字母分别放置的位置意思是 A移动到B C为工具人地区方便移动
    HanNuoTa(num-1,A,C,B) 
    
    #把最底部的块移动 移动轨迹A->C
    print("[STEP{0:>4}] {1}->{2}".format(count,A,C));count+=1
	
	#此刻移动后 我们的最底部以上的块就移动B区了
	#那么我们递归思路把B区的所有块移动到C去 A区是工具人区
    HanNuoTa(num-1,B,A,C)

n = int(input())
HanNuoTa(n,'A','B','C')


提交结果


转载:https://blog.csdn.net/qq_37500516/article/details/116297881
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场