#HANOR再帰関数再帰鎖発現イル一実施形態 COUNT = 0 DEF ハノイ(N、SRC、DST、MID): グローバルCOUNT IF N - == 1 : 印刷(" {}:{} - > {} " .format( 。1 、SRC、DST)) COUNT + = 1。 他: ハノイ(N- -1 、SRC、MID、DST) 印刷(" {}:{} - > {} " .format(N、SRC、DST)) COUNT + 1 = ハノイ(N -1 、MID、DST、SRC) ハノイ( 3、" A "、"C " " B " ) 印刷(カウント)
Nのみとの関係を考慮して1-n回回
ネットワークからの抜粋(将来の学習のためのモデル。本物のユニークなスキル)
インポートカメ クラススタック: デフ __init__ (自己): self.items = [] DEF のisEmpty(自己): 戻り LEN(self.items)== 0 DEF プッシュ(自己、項目): self.items.append(項目) DEF ポップ(自己): 戻りself.items.pop() デフPEEK(自己): 場合 ないself.isEmptyは(): リターン self.items [lenは(self.items) - 1 ] defのサイズ(自己): 戻り値はlenの( self.items) デフdrawpole_3(): #はハノイ極のタワーを描画 T = turtle.Turtle() t.hideturtle() DEF drawpole_1(K): t.up() t.pensize( 10 ) t.speed( 100 ) T.後藤( 400 *(1-K)、100 ) t.down() T.後藤( 400 *(1-K)-100 ) T.後藤( 400 *(1-K)-20、-100 ) T. GOTO( 400 *(1-K)+20、-100 ) drawpole_1(0) #ハノイ極のタワー[0]描く drawpole_1を(1) #ハノイ極のタワーを描く[1] drawpole_1(2) #ハノイ極のタワーを描く[2] DEF creat_plates(N): #製造Nディスク [turtle.Turtle()プレート= 用 I におけるレンジ(N)] のための I におけるレンジ(N): プレート[I]。アップ() プレート[I] .hideturtle() プレート[I] .shape(" スクエア" ) プレート[I] .shapesize( 1,8- I) プレート[I] .goto( -400、-90 * + 20 I) プレート[I] .showturtle() の戻りプレート DEF pole_stack(): #極スタック産 極を= [スタック()のための Iレンジ(3 )] 戻り極 DEF moveDisk(プレート、ポーランド、FP、TP): #極を移動させるために極から極[FP]天板プレートに[MOV] [FP]を[TP] MOV = ポール[FP] .peek() プレート[MOV] .goto((FP -1)* 400150 ) プレート[MOV] .goto((TP -1)* 400150 ) L =ポール[TP] .size()位端部の動きを決定します高さ(最上部だけ元上記プレート上の) プレート[MOV] .goto((1-TP)* 400、* 20 -90 +であるL) DEF moveTower(板、ポール、高さ、fromPole、toPole、withPole)。#再帰排出トレイ IF高さ> = 1 : moveTower(板、ポール、高さ -1、fromPole、withPole、toPole) moveDisk(板、ポール、fromPole、toPole) 極[toPole] .push(極[fromPole] .pop()) moveTower(板、ポール、高さ -1 、withPole、toPole、fromPole) マイスクリーン = turtle.Screen() drawpole_3() N = INT(入力(" 请输入汉诺塔的层数并回车:" )) プレート = creat_plates(N) 極 = pole_stack() のための I における範囲(N): 極[0] .push(I) moveTower(板、ポール、nは、0、 2,1 ) myscreen.exitonclick()