-1
我一直在嘗試創建一個程序來解決河內的塔使用遞歸思維。我在網上看了很多,無法弄清楚爲什麼代碼不斷打印出錯誤的東西。這裏是我到目前爲止有:河內遞交的塔
public static void tower(int start, int finish, int helper, int number)
{
if(number == 1)
System.out.println("Move disk 1 from "+start+" to "+finish+".");
else
{
tower(start, finish, helper, (number - 1));
System.out.println("Move disk "+number+" from "+start+" to "+finish+".");
tower(helper, start, finish, (number - 1));
}
}
}
,但會將打印出來:
Move disk 1 from 1 to 3.
Move disk 2 from 1 to 3.
Move disk 1 from 2 to 1.
Move disk 3 from 1 to 3.
Move disk 1 from 2 to 1.
Move disk 2 from 2 to 1.
Move disk 1 from 3 to 2.
有什麼建議?
我要縮進的代碼,但你有更多的結束括號比開放括號。你能檢查你複製的代碼是否正確?另外,我們需要看看你是如何調用這個函數來真正回答你的問題的。請閱讀本頁,以瞭解我們需要從您那裏得到一個很好的答案:http://stackoverflow.com/help/mcve –
首先,你確定它是'數字== 1'而不是'數字== 0' ?一般來說,如果你有3個磁盤,它們將是0,1,2。其次,它看起來像遞歸參數是錯誤的。例如,我*認爲*(沒有做很多調試),第一次遞歸調用應該是'塔(開始,幫手,結束,(數字-1));'。您應該仔細檢查這裏的算法。 – KevinO