Python龟递归树

use*_*664 3 python tree turtle-graphics

我想用python的乌龟编写一个程序来创建一个带有关卡的树.下面是一些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
    
    Run Code Online (Sandbox Code Playgroud)

我的计划:

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
Run Code Online (Sandbox Code Playgroud)

Jer*_*iah 6

我认为有两个问题.

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

第二个问题是逃逸条件.第一次更改时,绘图将在没有更多级别绘制时完成,或者n == 1.

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