在學習遞歸函數的時候,漢諾塔是一個很好的例子
傳說大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞着64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。在最後一片圓盤移動完後,世界也就毀滅了。
用python實現的思路:
移動過程:
假設有n個盤子,abc三根柱子
第一步:把n-1個盤子從a經過c移動到b
第二步:把第n個盤子(最大的那個)從a移動到c
第三步:把n-1個盤子從b經過a移動到c
移動完成,世界毀滅。
count = 0
def hanoi(n, a, b, c):
if n > 0:
hanoi(n-1, a, c, b)
print('moving from [%s] to [%s]' % (a, c))
global count
count += 1
hanoi(n-1, b, a, c)
hanoi(64, 'A', 'B', 'C')
print(f'一共移動了{count}次')
看下測試結果:18446744073709511615秒----ps:可以將64換成小一點的數字,瞭解過程
假設移動一片圓盤需要1s,那麼,一共需要大概 584942417355年,約等於5849億年。so,目前不用擔心地球毀滅