第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于Python漢諾塔的問題,下面的代碼寫法不懂?。。⌒“装。。。。。。?/h1>

關于Python漢諾塔的問題,下面的代碼寫法不懂?。?!小白?。。。。。?!

asdhjhg 2017-02-11 00:32:39
#coding=utf-8 #關于Python的問題 #這道漢諾塔題原理我懂了,其實就是不斷在循環(huán)做同樣的事,只是所謂的a,b,c這三個‘柱子’中b和c不斷調換位置。但是下面的代碼寫法不大懂!?。⌒“装。。。。。。?def?move(n,?a,?b,?c):????? ????if?n==1: ????????print?a,'-->',c ????????return???????????#if語句print之后不是就結束了嗎??有同學說不加會無限循環(huán)?都print出來了還怎么無限循環(huán)呢? ????else:????????????????#這里我加了else,很多同學的代碼這里都沒有寫else,為什么?不寫不是邏輯有問題? ????????move(n-1,a,c,b)??#這里表示是將n-1個盤子從源柱移動至過度柱?為什么是這樣寫?move()為什么可以實現(xiàn)n-1的隨意移動? ????????print?a,'-->',c??#這里為什么又出現(xiàn)了print?我知道這是把最后一個移到目標柱,為什么不是和上面一樣move() ????????move(n-1,b,a,c)??#這里和line6一樣的,()里的n-1為何可以隨意移動?而且a,c,b和a,b,c這種寫法怎么解釋?,感覺這代碼為什么要這么繞....這漢諾塔的意思我都理解,可是代碼寫的我凌亂?。?! ???????? move(4,?'A',?'B',?'C') 請大神為我一一細答!小弟不勝感激?。?!
查看完整描述

1 回答

已采納
?
亞努人

TA貢獻58條經(jīng)驗 獲得超75個贊

這是遞歸的典型應用。下面通俗的說明一下,主要明白意思,就好懂了。

??def?move(n,?a,?b,?c):?#這一句是定義move函數(shù),其中n是盤子的數(shù)量,a是源柱,b是輔助柱子,c是目標柱子
if?n==1:???????
????print?a,'-->',c
????return

這段語句的意思是,當盤子只有1個的時候,就直接輸出,將那個盤子從a柱移到c柱。并且會結束代碼的執(zhí)行!因為n=1是遞歸的邊界條件(當你以后學算法學到遞歸的時候就知道了,每個遞歸程序都有一個邊界條件,用于結束循環(huán),跳出代碼的執(zhí)行)。

另外,else可以不加,因為如果你給的n是1,自然會執(zhí)行if語句,如果不是1,自然順序執(zhí)行if后面的語句,不加也是可以的。

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

從這里開始,就是函數(shù)的遞歸調用了(自己調用自己)。當有n個盤子的時候(n !=1),我們首先要將前面的n-1個盤子先移走,即將盤子從原柱通過目標柱移到輔助柱上,此時參數(shù)中的c實際就相當于是輔助柱了,所以有下面的語句進行路徑輸出

print?a,'-->',c

移到輔助柱上當然是不夠的,還要將輔助柱上的盤子移到目標柱去,所以下面的語句

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

原先輔助柱b此時就是原柱了,將通過a作為輔助移到目標柱c上去。整個過程會重復的執(zhí)行,比如最先執(zhí)行的n-1,在n-1執(zhí)行時,又會先將n-1個盤子的前n-1個盤子(即n-2)進行移動,以此遞歸,直到邊界條件,當n為1時,就輸出了最開始的那句話。

所以上面你有個問題是move為什么可以隨意移動,原因就是遞歸函數(shù)自己調用自己,自己可以按照既定的規(guī)則移動,那參數(shù)的順序改變了,每個參數(shù)代表的含義也不一樣了,原來的目標柱在后續(xù)的移動步驟中可能就是輔助柱了,但移動的規(guī)則還是沒變。所以遞歸的代碼簡潔難懂,就是這樣的。

查看完整回答
2 反對 回復 2017-02-11
  • 亞努人
    亞努人
    你后面的理解是對的,只要n-1不是1,就會一直遞歸下去做n-2,n-3……至于你說的為什么代碼中沒有體現(xiàn)打印出諸如a-->b這樣的路徑,還是我之前跟你提到的,后面遞歸執(zhí)行move函數(shù)的時候,參數(shù)的順序改變了,原來的a(源柱)在后面的move中就是b(輔助柱)了,那語句中的print a->c實際上打印出來也就是諸如b->a這樣的路徑,這個結合實際情況,把三個柱子的角色弄清楚,打印出來的路徑就沒錯了。
  • asdhjhg
    asdhjhg
    我今天晚上又研究了一下,我感覺我好想明白了,請看看我自己的回復!
  • asdhjhg
    asdhjhg
    大神給評閱一下!我自己得理解....
點擊展開后面1
  • 1 回答
  • 0 關注
  • 3427 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號