課程
/后端開發
/Python
/初識Python
這個程序大概看懂了,每一步知道什么意思,但是這個輸出結果沒看懂,那個A-->B,C-->A,C-->B是怎么來的,有大佬詳細分析一下每一步運行得出的結果嗎
2019-04-17
源自:初識Python 7-5
正在回答
兄弟,講解步驟還是比較麻煩的,每n層,就需要有2^n-1次步驟,4層就有15步
所以簡單講解一下3和2層,然后自己驗證4層的移動,驗證move(4,a,b,c)的第一步驟move(3,a,c,b)下面的7個步驟就可以。
2層:
move (2,a,b,c)
? ?#都會先判斷是否為1
? ?#然后不是,就會進行接下來三步: 1:move(n-1, a, c, b),2: print a, '-->', c,3:move(n-1, b, a, c)
? ?1:move(1,a,c,b)#分析此處的內部運作
? ? ? ?#因為是1,所以不走三步,直接執行if下print a-c,但是這里可能就導致不好理解了
? ? ? ?#其實這里是指print 1位到3位,可見在 move(1,a,c,b)中,1位是a,3位是b
? ? ? ?#打印結果是A--》B
? ?2:print a-c #其實也是執行print本層move的 1位到3位 ?
? ? ? ? #在本層的move (2,a,b,c)中,1位是a,3位是c
? ? ? ?#打印結果是A--》C
? 3:move(1,b,a,c)
? ? ? ?#因為是1,所以執行print a-c---》print 1位到3位,1位是b,3位是c
? ? ? ?#打印結果是B--》C
? ? ? ?#后面不在重復打印的是本層move的1位到3位
? ? ? ?AB ?AC ? BC
3層:
?move(3,a,b,c)
? ? #判斷不是1
? ? #進入接下來三步
? ? 1:move(2,a,c,b)
? ? ? ? #這里的abc位置剛才沒講,因為剛才和程序的變化一樣
? ? ? ? #這里因為有多層,講解一下:
? ? ? ? #1步驟:move(n-1, a, c, b)程序的意思是,上層的move里的第二位和第三位互換
? ? ? ? #3步驟:move(n-1, b, a, c)程序的意思是,上層move里的第一位和第二位互換
? ? ? ? #這里2不是1,所以要進行三步
? ? ? ? ①:move(1,a,b,c)#上層move的2,3位互換
? ? ? ? ? ? ????????#打印結果是A--》C
? ? ? ? ②:打印結果是A--》B
? ? ? ? ③:move(1,c,a,b)#上層move的1,2位互換
? ? ? ? ? ????????? #打印結果是C--》B
? ? ?2:打印結果是A--》C#提示一下,本層是:move(3,a,b,c)
? ? ?3:move(2,b,a,c)#上層move的1,2位互換
? ? ? ? ?①:move(1,b,c,a)#上層move的2,3位互換
? ? ? ? ? ? ?????????#打印結果是B--》A
? ? ? ? ?②:打印結果是B--》C
? ? ? ? ?③:move(1,a,b,c)#上層move的1,2位互換
? ? ? ? ? ? ?????????#打印結果是A--》C ?
AC ? AB ? CB ? AC ? BA ? BC ? AC?
kuduo 提問者
weixin_慕工程4589350
慕圣4301918 回復 weixin_慕工程4589350
print
print?da
把我看暈了,繞進去了,出不來了,貌似好復雜的樣子
第一個 move(n-1,a,c,b) 表示的是把上面的n-1塊圓盤從 a移動到b然后 再把 a 移動到 c? 即 print a--->c第二個move(n-1,b,a,c) 表示把放在b上的n-1個圓盤移動到c上,實現了整個程序而這個 move(4, 'A', 'B', 'C') 表示的是調用這個函數,把參數給傳遞進去。...
舉報
學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2019-04-18
兄弟,講解步驟還是比較麻煩的,每n層,就需要有2^n-1次步驟,4層就有15步
所以簡單講解一下3和2層,然后自己驗證4層的移動,驗證move(4,a,b,c)的第一步驟move(3,a,c,b)下面的7個步驟就可以。
2層:
move (2,a,b,c)
? ?#都會先判斷是否為1
? ?#然后不是,就會進行接下來三步: 1:move(n-1, a, c, b),2: print a, '-->', c,3:move(n-1, b, a, c)
? ?1:move(1,a,c,b)#分析此處的內部運作
? ? ? ?#因為是1,所以不走三步,直接執行if下print a-c,但是這里可能就導致不好理解了
? ? ? ?#其實這里是指print 1位到3位,可見在 move(1,a,c,b)中,1位是a,3位是b
? ? ? ?#打印結果是A--》B
? ?2:print a-c #其實也是執行print本層move的 1位到3位 ?
? ? ? ? #在本層的move (2,a,b,c)中,1位是a,3位是c
? ? ? ?#打印結果是A--》C
? 3:move(1,b,a,c)
? ? ? ?#因為是1,所以執行print a-c---》print 1位到3位,1位是b,3位是c
? ? ? ?#打印結果是B--》C
? ? ? ?#后面不在重復打印的是本層move的1位到3位
? ? ? ?AB ?AC ? BC
3層:
?move(3,a,b,c)
? ? #判斷不是1
? ? #進入接下來三步
? ? 1:move(2,a,c,b)
? ? ? ? #這里的abc位置剛才沒講,因為剛才和程序的變化一樣
? ? ? ? #這里因為有多層,講解一下:
? ? ? ? #1步驟:move(n-1, a, c, b)程序的意思是,上層的move里的第二位和第三位互換
? ? ? ? #3步驟:move(n-1, b, a, c)程序的意思是,上層move里的第一位和第二位互換
? ? ? ? #這里2不是1,所以要進行三步
? ? ? ? ①:move(1,a,b,c)#上層move的2,3位互換
? ? ? ? ? ? ????????#打印結果是A--》C
? ? ? ? ②:打印結果是A--》B
? ? ? ? ③:move(1,c,a,b)#上層move的1,2位互換
? ? ? ? ? ????????? #打印結果是C--》B
? ? ?2:打印結果是A--》C#提示一下,本層是:move(3,a,b,c)
? ? ?3:move(2,b,a,c)#上層move的1,2位互換
? ? ? ? ?①:move(1,b,c,a)#上層move的2,3位互換
? ? ? ? ? ? ?????????#打印結果是B--》A
? ? ? ? ?②:打印結果是B--》C
? ? ? ? ?③:move(1,a,b,c)#上層move的1,2位互換
? ? ? ? ? ? ?????????#打印結果是A--》C ?
AC ? AB ? CB ? AC ? BA ? BC ? AC?
2019-07-11
print
2019-05-28
把我看暈了,繞進去了,出不來了,貌似好復雜的樣子
2019-04-18
第一個 move(n-1,a,c,b) 表示的是把上面的n-1塊圓盤從 a移動到b然后 再把 a 移動到 c? 即 print a--->c第二個move(n-1,b,a,c) 表示把放在b上的n-1個圓盤移動到c上,實現了整個程序而這個 move(4, 'A', 'B', 'C') 表示的是調用這個函數,把參數給傳遞進去。...