3

レベルを持つツリーを作成する python のタートルを使用してプログラムを作成するとします。以下にいくつかの I/O を示します。

ここに画像の説明を入力

私のプログラムは最初のケースでは動作しますが、2 番目のケースでは出力が多すぎます。このプログラムの規定は次のとおりです。

  • 再帰的でなければならない

  • 次のタートル関数のみを使用できます。

    turtle.forward(100)     <-- turtle goes forward 100 steps
    turtle.right(90)        <-- turtle turns right 90 degrees
    turtle.penup()          <-- turtle lifts its pen up off of the paper
    turtle.forward(100)     <-- turtle goes forward 100 steps
    turtle.pendown()        <-- turtle puts its pen down on the paper
    turtle.pencolor("red")  <-- turtle uses red pen
    turtle.circle(100)      <-- turtle draws circle of radius 100 
    turtle.pencolor("blue") <-- turtle changes to blue pen (most other common colors work too!)
    turtle.forward(50)      <-- turtle moves forward 50 steps
    turtle.xcor()           <-- turtle returns its current x-coordinate
    turtle.ycor()           <-- turtle returns its current y-coordinate
    

私のプログラム:

import turtle

def tree(length,n):
    """ paints a branch of a tree with 2 smaller branches, like an Y"""
    if length < (length/n):
           return       # escape the function
    turtle.forward(length)        # paint the thik branch of the tree
    turtle.left(45)          # rotate left for smaller "fork" branch
    tree(length * 0.5,length/n)      # create a smaller branch with 1/2 the lenght of the parent branch
    turtle.right(90)         # rotoate right for smaller "fork" branch
    tree(length * 0.5,length/n)      # create second smaller branch
    turtle.left(45)          # rotate back to original heading
    turtle.backward(length)       # move back to original position
    return              # leave the function, continue with calling program
4

1 に答える 1

7

2つの問題があると思います。

まず、再帰呼び出しの場合、2 番目のパラメーターは length/n ではなく n-1 にする必要があります。レベル n を描画している場合、次の呼び出しはレベル長/n ではなく、レベル n-1 を描画します。

2 つ目の問題は、エスケープ条件です。最初の変更では、描画するレベルがなくなるか、n==1 になった時点で描画が終了します。

宿題のように聞こえるので、正確なコードは投稿しません。

于 2012-10-09T22:42:11.397 に答える