1

シェルピンスキーの三角形を再帰的に描くプログラムに出くわしました。このコードを解釈する方法は、n == 0 になるまで sierpinski1 が呼び出され、n == 0 が何かが描画される唯一のケースであるため、3 つの小さな三角形 (呼び出しごとに 1 つの三角形) のみが描画されることです (panel.canvas.create_polygon) . ただし、これはコードの動作方法ではありません。実行すると、表示されると思われる3つの小さな三角形だけでなく、nに依存する数の三角形が描画されるためです。

関数 sierpinski1 が何かを描画できる条件が 1 つしかない場合、描画できるものはいくつあるか説明してもらえますか? それは私が理解できないプログラムの一部です。再帰についてできることはすべて調べましたが、この形式の再帰が機能する理由を説明する情報はありませんでした。

def sierpinski(n):
    x1 = 250
    y1 = 120
    x2 = 400
    y2 = 380
    x3 = 100
    y3 = 380
    panel = DrawingPanel(500,500)
    sierpinski1(n,x1,y1,x2,y2,x3,y3,panel)

def sierpinski1(n,x1,y1,x2,y2,x3,y3,panel):
    if n == 0:
        panel.canvas.create_polygon(x1,y1,x2,y2,x3,y3, fill = 'yellow', outline = 'black')
    else:
        sierpinski1(n-1,x1,y1,(x1+x2)/2,(y1+y2)/2,(x1+x3)/2,(y1+y3)/2, panel)
        sierpinski1(n-1,(x1+x3)/2,(y1+y3)/2,(x2+x3)/2,(y2+y3)/2,x3,y3,panel)
        sierpinski1(n-1,(x1+x2)/2,(y1+y2)/2,x2,y2,(x2+x3)/2,(y2+y3)/2,panel)
4

3 に答える 3

1

ものは n = 0 の場合にのみ描画されますが、n = 1 で呼び出されると、n = 0 で 3 回呼び出されます。同様に、n = 2 で呼び出されると、3 回呼び出されます。 n = 1 で、それぞれが n = 0 でそれを 3 回呼び出し、合計 9 つの描画を行います。一般的にはレイヤーごとに呼び出し回数が 3 倍になるため、n で呼び出すと 3^n 個の小さな三角形が描画されます。

于 2013-08-11T23:27:41.590 に答える
1

関数 sierpinski1 が何かを描画できる条件が 1 つしかない場合、描画できるものはいくつあるか説明してもらえますか?

関数はゼロ以外の各ステップで 3 つの再帰呼び出しを行うためです。つまりn、0 より大きいすべての値について、関数は for の値nが 1 小さい 3 つの異なるパスに分岐します。n=0合計で3 n回に達することになります。

于 2013-08-11T23:28:44.350 に答える