漢諾塔:
有a,b,c三根柱子,在a柱子上從下往上按照大小順序摞著n圓盤。把圓盤從小到大重新擺放在柱子c上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。
1.該問題可以分解成三個部分:把除最下面的圓盤,即(n-1)個圓盤,從a移到b;把最下面的圓盤從a移到c;把其餘(n-1)個圓盤移到c。(n=1時為特殊情況,只需要直接把a移到c)
2.其中第一步和第三步可以通過遞迴得到:n個圓盤可以分為上面(n-1)個圓盤和最下面的圓盤,而(n-1)個圓盤又可以看作(n-2)個圓盤和最下面的圓盤.....最終可以看作2個圓盤的情況。
綜上,第一步和第三步採用遞迴,第一步實際上是將(n-1)個圓盤從a移到b,然後通過遞迴一步步遞迴到n=2的情況,即move(n-1,a,c,b)。第一步實際上是將(n-1)個圓盤從b移到c,然後通過遞迴一步步遞迴到n=2的情況,即move(n-1,b,a,c)。中間步驟只把最大的圓盤從a移到c,只需一步,即,move(1,a,b,c)。
# -*- coding: utf-8 -*-
def move(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)
move(n, a, b, c): python3 遞迴解漢諾塔問題
在經典漢諾塔問題中,有 3 根柱子及 n 個不同大小的穿孔圓盤,盤子可以滑入任意一根柱子。一開始,所有盤子自上而下按公升序依次套在第一根柱子上 即每乙個盤子只能放在更大的盤子上面 移動圓盤時受到以下限制 1 每次只能移動乙個盤子 2 盤子只能從柱子頂端滑出移到下一根柱子 3 盤子只能疊在比它大的盤子...
漢諾塔遞迴 Python
今天繼續學習遞迴 終於 終於把 去年學c語言沒看懂也沒去研究的漢諾塔解決了 感謝網上眾多的老鐵們的資料相助 和 宿舍學長的幫助,好了以下說理解後的思路 1 n 1 第1次 1號盤 a csum 1 次 2 n 2 第1次 1號盤 a b 第2次 2號盤 a c 第3次 1號盤 b c sum 3 次...
Python實現遞迴函式 漢諾塔
def move a,b,c,n if n 1 print a,c else move a,c,b,n 1 print a,c move b,a,c,n 1 move a b c 3 以上為python 實現漢諾塔遞迴問題,關於程式過程,可以根據以下三幅圖作為輔助理解 1 當只有乙個盤子的時候,只需...