因此,我們有經典的河內問題,我只是進入這個遞歸的事情,它的doozie! 這是完全運作,但我只是不明白它可能是如何!正如我所理解的那樣,對於任何n,它都會打印出「從+」到「+直通」,每當n接近1時就會發生這種情況。人們會認爲,在n = 1時,代碼將停止,然後我得到「thru +」的打印輸出到「+ to」(最後打印輸出)。如果n = 1是終止條件,那麼我怎樣才能得到「免費的?」的最後一部分代碼。河內塔,工作,但不應該
我還希望代碼至少在每次迭代時都執行最後一次打印輸出,但不是!此外,這樣的例子總是包括兩個遞歸調用,但這隻適用於一個!這到底是怎麼回事?這段代碼如何一步一步執行?我誤解了關於遞歸方法的一些基本事實嗎? (在Eclipse編譯器上編譯)。
public static void hanoi(char from, char to, char thru, int n) {
if (n==1) {
System.out.println(from + " going to " + to);
} else {
System.out.println (from + " going to " + thru);
hanoi(from, to, thru, n-1);
System.out.println (thru + " going to " + to);
}
}
使用斷點和單步,看看它是如何運行的分步實施。 – weston
請注意,默認情況下通常有兩個遞歸調用,因爲如果它不是一個移動掛鉤,則將所有移動到'thru'使用'to'作爲新的臨時移動,將最後一個移動''從' - >'移動到' ,然後遞歸將n-1個pegs從'thru'移動到''''使用'from'作爲暫時的。你的實現打印出'2n-1'行,而它應該是'2^n-1' – Sylwester