3

我想用python的turtle编写一个程序来创建一个有层次的树。下面是一些 I/O,因此您可以看到它应该做什么。

在此处输入图像描述

我的程序适用于第一种情况,但为第二种情况打印太多。该计划的规定是:

  • 必须是递归的

  • 只能使用以下海龟函数:

    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

我认为有两个问题。

首先,对于递归调用,第二个参数应该是 n-1 而不是 length/n。如果您正在绘制第 n 级,则下一次调用将绘制第 n-1 级,而不是级别长度/n。

第二个问题是逃逸条件。通过第一次更改,当没有更多级别可以绘制时,绘制将完成,或者 n==1。

这听起来像家庭作业,所以我不会发布确切的代码。

于 2012-10-09T22:42:11.397 回答