"""
漢諾塔問題
解法:
若柱子標爲A\B\C,要求從A搬到C。
1、如果只有一個盤子時,將它直接搬到C。
2、如果有兩個盤子時,將B作爲輔助柱子。即A->B,A->C,B->C。
3、若有n個盤子時,則移動所需次數爲(2^n)-1。
比如,當盤子爲64個時,需要移動2^64-1次。假設每秒移動一次,大約需要5850億年。
"""
def towers_of_hanoi(n,A,B,C):
if n == 1:
print("Move sheet",n,"from",A,"to",C)
else:
towers_of_hanoi(n-1,A,C,B)
print("Move sheet",n,"from",A,"to",C)
towers_of_hanoi(n-1,B,A,C)
if __name__ == '__main__':
towers_of_hanoi(5,'A','B','C')
"""
運行結果:
Move sheet 1 from A to C
Move sheet 2 from A to B
Move sheet 1 from C to B
Move sheet 3 from A to C
Move sheet 1 from B to A
Move sheet 2 from B to C
Move sheet 1 from A to C
Move sheet 4 from A to B
Move sheet 1 from C to B
Move sheet 2 from C to A
Move sheet 1 from B to A
Move sheet 3 from C to B
Move sheet 1 from A to C
Move sheet 2 from A to B
Move sheet 1 from C to B
Move sheet 5 from A to C
Move sheet 1 from B to A
Move sheet 2 from B to C
Move sheet 1 from A to C
Move sheet 3 from B to A
Move sheet 1 from C to B
Move sheet 2 from C to A
Move sheet 1 from B to A
Move sheet 4 from B to C
Move sheet 1 from A to C
Move sheet 2 from A to B
Move sheet 1 from C to B
Move sheet 3 from A to C
Move sheet 1 from B to A
Move sheet 2 from B to C
Move sheet 1 from A to C
"""