今天繼續學習遞迴 終於 終於把 去年學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 次
(3)n == 3
第1次 1號盤 a---->c
第2次 2號盤 a---->b
第3次 1號盤 c---->b
第4次 3號盤 a---->c
第5次 1號盤 b---->a
第6次 2號盤 b---->c
第7次 1號盤 a---->c sum = 7 次
由以上可以看出從a-c(黑體)以上的是實現從a->b;以下的是實現從b->c;
所以呢 假設總的是 a b c 三個柱子,(a=初始 b=過度 c=目標)
我們首先要實現 n-1個盤子的 a->b;(a=初始 c=過度 b=目標)
之後把第n個盤子從 a->c;
之後實現之前n-1個盤子的 b->c; (b=初始 a=過度 c=目標)
並且把每個n-1 n-2 n-3 n-4......都當作n來進行 每乙個都會遞迴道n=1的時候,這樣我們的遞迴就出來了
以下是**:
global step
step=0
def move(n,x,y,z):
global step
if n==1:
print("%s->%s"%(x,z))
else:
move(n-1,x,z,y)
print("%s->%s"%(x,z))
move(n-1,y,x,z)
step+=1
if __name__=="__main__":
num = int(input())
a='a'
b='b'
c='c'
move(num,a,b,c)
print(step)
python 漢諾塔 Python漢諾塔
import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...
漢諾塔 遞迴
個人理解遞迴函式的基本要求就是,函式中呼叫函式本身,滿足特定的條件後返回。include include include include include include include include include include include include include 標頭檔案引用的較多...
遞迴漢諾塔
遞迴問題 遞迴要有三個要素 1.遞迴結束條件 2.遞迴結束時的處理 3.抽取重複的邏輯,剝離外殼 重點都在這一步 漢諾塔問題 把圓盤從下面開始按大小順序重新擺放在另一根柱子上。且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。首先,要搞這個編碼得要知道漢諾塔的解題思路 1.把a塔上...