解決漢諾塔一個簡單的遞歸代碼:漢諾塔 - 簡單算法
public static void hanoi(char A, char B, char C, int n) {
if(n>0) {
hanoi(A,C,B,n-1);
System.ouit.println("moving from " + A + " to " + B);
hanoi(C,B,A,n-1);
}
}
我和我的同學都檢查這些代碼今天,雖然我們知道它是如何工作的,我們無法理解的算法,這意味着我們永遠不會想到這樣的解決方案。
我確實記得一位老師曾經說過,我們不在乎它是如何解決的,我們只是假設它是如此。他指的是函數自己調用的部分。
我知道我們基本上分兩步解決河內塔。首先將所有戒指移到C(這是一個來自老師的代碼,在這種情況下,我們希望將所有戒指移到B而不是C),然後將最大的戒指移動到B,然後將所有剩餘的戒指從C移動到B。在第一個調用中,我們從A移動到C,第二個從C移動到B. 我在紙上寫了如何執行代碼並獲得正確的打印,但我仍然不明白。我明白,但我不明白,如果你明白我的意思。
PS:我查過很多影片,我找到的鏈接,沒有人給我任何值得的答案,以你怎麼會想到這樣一個算法的出藍色。這是不同的,例如fibonaccis序列,這是合乎邏輯的。但是,這...
編輯:這是我很難甚至解釋什麼我不明白,我從未有過的編程問題。我知道這段代碼是如何工作的,我可以在紙上寫下整個過程。我知道如何解決河內塔。但如果你要給我一個任務來寫一個河內大廈的算法,我永遠不會想到這一點。我正在看這個代碼,我在說,這個代碼是如何給出正確的打印輸出的?我對這個信念的飛躍有一個問題,但不知怎的,這是遞歸的工作原理。基本上對於前兩個環,我沒有理解這個算法的工作原理。但從那時起,移動的戒指是不同的,因爲你已經有2個戒指坐在一個釘子上,你必須移動它們,然後才能移動更多的戒指,然後將這些舊戒指放回去。呃,我從來沒有遇到過編程方面的問題,這真的讓我感到困擾,因爲這只是一個開始,它應該是非常簡單和合乎邏輯的,我們的老師甚至不會解釋它是如何工作的,他只是給了我們代碼並感動上。
嗨,歡迎Stack Overflow。你可以添加一個特定的問題到你的文章嗎? – astorije 2014-10-04 22:23:25
請參閱[*算法+數據結構=程序*](http://en.wikipedia.org/wiki/Algorithms_%2B_Data_Structures_%3D_Programs),第3章和[*河內塔*](http:// en。 wikipedia.org/wiki/Tower_of_Hanoi)。 – trashgod 2014-10-04 22:23:45