漢諾塔(又稱河內塔)問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。
我曾經遇到過幾次漢諾塔問題,當時覺得想明白了,再次遇到時又要從頭分析,這次使用python的遞迴法真的非常簡單,其實無論盤子有多少,抓住本質的移動規律就可以了。move(n,a,b,c)函式中對應的a表示起始位置,b表示中間位置,c表示最終要移到的位置。整個漢諾塔問題可以分為以下三步:
將n-1個盤子從a移到b
將最後1個盤子從a移到c
將n-1個盤子從b移到c
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
defmove
(n,a,b,c):
if n==1:
print(a,'-->',c)
else:
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
print(move(3,'a','b','c'))
用Python實現漢諾塔遞迴解法
看譚老師著名的c語言教材一直沒有搞懂漢諾塔的遞迴原理,偶爾看到一本c 教材上講解的比較詳細,就用python寫了乙個解法,總共5行 還是挺簡單的。寫的時間比較久遠了,等我找到那本書,再把書中的解析附上。引數的含義為 盤子總數,起始杆,中間杆,目標杆 defmovedisk count,needle1...
python遞迴實現漢諾塔
實現思路 1.將a上 n 1個移動到b 2.將a上最後乙個移動到c 3.將b上 n 1個移動到a 4.將b上最後乙個移動到c 重複上面步驟即可 python 實現如下 全域性變數cnt 統計移動次數 global cnt cnt 0 def move x,y global cnt 再次宣告,表示在這...
python 漢諾塔遞迴實現
def move from,to 將盤子從from移動到to,動畫效果需要腦補 print from,to def hanoi n,src,tmp,dst 將n個盤子從src搬到dst if n 1 只有乙個盤子的情況 move src,dst else 有乙個以上盤子的情況 hanoi n 1,s...