注意:我有两个图片,我想张贴,但我没有足够的声誉:一个是代码输出,另一个是一个简单的图形,更好地定义了这个课程如何定义这个塔的河内问题。
谢谢你的代表,所以我现在可以发布图片了。,我已经发布了代码输出的图像,以便让您更好地了解在本课程中介绍的河内塔问题的这个特殊公式。此外,如果这个案件与以前河内塔问题的答案不同,我希望它能帮助那些希望回答这一具体案件的人。
正如我在其他帖子中提到的,我学习编程主要是为了我的爱好。大约一个月前,我决定停止学习C和Java,从地面开始学习。所以我找到了一些用Python2-7教编程的在线课件。到目前为止,这门课程做得很好,为我提供了我需要的基础。
我目前正在讨论本课程中的递归问题,类作为示例使用的问题之一是河内塔问题。我很难理解递归是如何在这个问题上工作的。在类所涵盖的其他示例中,例如Fibonacci序列和回文检查器,我在理解递归是如何工作的方面没有任何问题。
作为参考,我在下面张贴了河内塔问题是如何为这个例子制定的图表:
由于我不能发布这个问题是如何为这门课制定的图片,我将用文本描述它。
解决这一问题的两个规则是: 1)一次只能移动1个环;2)大直径环不能放置在较小直径环的顶部。
通过手工解决这一问题,我确定了以下解决方案:
以下为n=3个环:
下面是用于解决右侧这个问题的python代码的图形,以及左侧shell中的输出:
def Hanoi(n,f,t,s,indent = ' '):
print indent, 'Hanoi called with n = ' + str(n)
##print n
if n == 1:
print indent, 'move from ' + f + ' to ' + t
else:
Hanoi(n-1,f,s,t,indent+indent)
print indent, 'here'
Hanoi(1,f,t,s,indent+indent)
print indent, 'there'
Hanoi(n-1,s,t,f,indent+indent)
print indent, 'anywhere'在代码中,教授提到使用print语句和缩进来帮助人们更好地理解递归是如何工作的是个好主意。这个策略帮助我更好地理解Fibonacci和回文示例,但我仍然在这个问题上遇到麻烦。
代码输出:

正如您在输出中所看到的,移动n=2和n=3的序列与“手动解决方案”一致。我想我理解n=2的输出是如何由代码生成的.然而,对于n=3来说,我正在挣扎。特别是对于绿色括号A中的代码,我不明白“从t到s”是如何输出的。我看不到代码中的"t“是打印语句中的第一个输出!类似地,对于绿色括号B中的代码,我看不出"s“是第一个输出,而"f”是打印的move语句中的第二个输出.
我希望任何能帮助我更好地理解递归是如何解决这个问题的输入。
发布于 2016-05-07 14:56:38
拉恩提供的联系应该对你有帮助,不过,以下是我对你所关心的问题的评论:
发布于 2016-05-08 13:55:07
在阅读了Rahn链接到的网页之后,我现在了解了这个页面上的程序:Towers of Hanoi Python。
我喜欢在这个问题中,当代码“移动塔”或“移动光盘”时,代码是如何被特别调用的。此外,在顶部投票回答问题时,打印语句和对高度以及toPole、withPole和fromPole值的跟踪也帮助我理解递归是如何工作的。为了进一步澄清,我添加了一个条件测试是否高度== 0和打印行说明,以进一步说服自己。
https://stackoverflow.com/questions/37074708
复制相似问题