亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

徹底暈菜了

寫代碼時怎么邏輯的???這個題我看明白了,但是不懂代碼是什么意思?。?! ? ?move(n-1, a, c, b) ? ?print a, '-->', c ? ?move(n-1, b, a, c) 這3行怎么解釋的?????

正在回答

3 回答

我只好把我以前的一個回答粘過來, 題主細細品味下,應該能明白:

漢諾塔的遞歸問題,特別容易被?參數名?給弄混淆,這個問題可以分為兩部分來說:

首先,這是一個遞歸問題,遞歸問題的思路都是一致的:

首先,遞減遞歸,其次做邊界判斷。 遞減調用:就是題主代碼里的第5行,第7行代碼; 邊界判斷: 第2行的if判斷。

其次這是一個漢諾塔問題,漢諾塔的問題,就是在除了初始柱外,依次放入次大底盤,且依次從初始柱解放最大底盤,這個問題代入遞歸的話就需要以下思路:

反向思考,從最簡單的只有兩個盤子考慮,而后依次遞增。 一個盤子的話就是會直接進入if判斷,也沒什么可以考慮的。

最后說下,漢諾塔的遞歸思路中最易混淆的“參數名”,在此只做一次說明,在第5行調用

move(n-1,a,c,b)

這次調用move函數時:執行到第6行:

print?a,'==>',?c

打印的是:?

A?-->?B

想明白這些,然后從只有三個盤子去套用函數,應該就能明白了,如果還不明白,也不是我打字能說明的了。


3 回復 有任何疑惑可以回復我~
#1

冬012 提問者

感謝您的回復,不過對于初學者來說,還是有些復雜了,研究了好多別人的方法,總算搞明白了,把我找到的最詳細的分析與您分享;http://blog.csdn.net/yafei450225664/article/details/8647908
2016-04-01 回復 有任何疑惑可以回復我~
#2

清波 回復 冬012 提問者

題主分享的link 已讀, 特別的好,謝謝
2016-04-05 回復 有任何疑惑可以回復我~
#3

mwmoo3180803 回復 冬012 提問者

這個好贊
2016-04-11 回復 有任何疑惑可以回復我~
def?Hanoi(n,a,b,c):
	if?n?==?1:
		print(a,'-->',c)
	else:
		Hanoi(n-1,a,c,b)
		Hanoi(1,a,b,c)
		Hanoi(n-1,b,a,c)
n?=?int(input('請輸入漢諾塔層數:'))
Hanoi(n,'a','b','c')
如果是三層的話:那么是a-->c , a -- b,之后的那個c --> b是怎么打出來的?
0 回復 有任何疑惑可以回復我~
#1

冬012 提問者

去看一下我前面發的那個博客鏈接,里面那篇文章解釋的非常詳細
2016-04-16 回復 有任何疑惑可以回復我~

print語句雖然沒變,但是函數里面的參數順序變了。輸出的就是第一個參數-->第三個參數

如果n不為1,就要把a移到b,所以調用move(n-1,a,c,b),此中的c是上面的b,b是c。print a, '-->', c 得到的就是a-->b。

2 回復 有任何疑惑可以回復我~
#1

冬012 提問者

感謝您的回復,不過對于初學者來說,還是有些復雜了,研究了好多別人的方法,總算搞明白了,把我找到的最詳細的分析與您分享;http://blog.csdn.net/yafei450225664/article/details/8647908
2016-04-01 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
初識Python
  • 參與學習       758398    人
  • 解答問題       8967    個

學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序

進入課程

徹底暈菜了

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號