三、下面為一以 C 語言撰寫之副程式,用來解決河內塔(tower of Hanoi)問題。
河內塔(Tower of Hanoi)問題是一個經典的遞迴算法問題。這個問題是由法國數學家Édouard Lucas於1883年提出,它包括三根柱子和一組可以套在柱子上的不同大小的圓盤。
問題的設定是:一開始所有的圓盤都按照大小順序堆疊在一根柱子上,最大的圓盤在最下面,最小的在最上面,形成一個塔狀結構。目標是將整個圓盤堆疊移動到另一根柱子上,並保持塔狀結構。在移動過程中必須遵守以下規則:
這個問題可以通過遞迴的方式解決,基本思想是將問題分解為更小的問題。例如,若要將n個盤子從 A 移到 C(以 B 為輔助柱),可以先將上面−1n−1個盤子從 A 透過 C 移到 B,然後將最大的盤子直接從 A 移到 C,最後再將那−1n−1個盤子從 B 透過 A 移到 C。
提供的 C 語言副程式展示了這個遞迴解決方案。當tower(n, start, end, tmp)被調用時,它會打印出移動n個圓盤從 start 柱到 end 柱的每一步,其中 tmp 柱被用作輔助。