前引闲聊
这次的作业啊 我觉得就挺有意思的
尽管我觉得第二个那个分治法找硬币题目真的好蠢好蠢好蠢
具体蠢在哪里我就在分治法找硬币那道题讲
我记得之前我上学期
我就看到了这个汉诺塔问题
但当时确实水平有限 再加上放寒假了
就🕊 🕊 🕊 鸽掉惹
没想到这次的题就布置了汉诺塔
那顺带这次把汉诺塔问题解决了
汉诺塔博客分析
当看到这类问题 其实第一个思路就应该是递归解决
汉诺塔精讲部分我放一个博客链接 确实讲的很清楚很好
但需要本身有递归的基础 + 一部分的灵性
图解汉诺塔问题(递归求解)
这篇博客我认为已经通俗到封顶了
如果真的想搞懂这类问题可以自己先去玩半个小时的汉诺塔小游戏
再加上自己去读读博客
就差不多了
原题题目
代码实现
提交代码需要把注释部分给删掉 不然会出错
注释部分解读代码
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
查看评论