再帰的な表現

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()

 

おすすめ

転載: www.cnblogs.com/lalalala-fan/p/12608858.html