Python乌龟:递归函数

Python Turtle: Recursive function

我无法弄清楚如何创建一个根据用户输入提取大写字母 I 的函数。如果用户输入是 1,它会绘制一个 I,如果它是 2,它会绘制 2 个 I's,如下图所示。

我可以通过使用简单的乌龟方法手动完成前 2 个级别,但是您如何递归地执行此操作以便在更高级别执行此操作?

def my_turtle_function(n):
    my_win = turtle.Screen()
    my_turtle = turtle.Turtle()
    my_turtle.speed(2)
    my_turtle.left(90)
    if n == 1:
        my_turtle.forward(100)
        my_turtle.right(90)
        my_turtle.forward(100)
        my_turtle.forward(-200)
        my_turtle.forward(100)
        my_turtle.right(90)
        my_turtle.forward(200)
        my_turtle.right(90)
        my_turtle.forward(100)
        my_turtle.forward(-200)
        my_turtle.forward(100)
        my_turtle.right(90)
        my_turtle.forward(100)

如果你想递归地做,你必须再次调用函数,使用不同的参数,例如"level" 小了一个,笔画只有原来的一半长。确保乌龟在方法的开始和结束时在同一个地方并面向相同的方向,然后当你在角落时再次调用该函数。

这是一些伪代码

def my_turtle_function(t, length, n):
    if n > 0:
        move up and left by length, face north
        call my_turtle_function(t, length/2, n-1)
        move right, right by length, face north
        call my_turtle_function(t, length/2, n-1)
        move left, down, down, left by length, face north
        call my_turtle_function(t, length/2, n-1)
        move right, right by length, face north
        call my_turtle_function(t, length/2, n-1)
        move back to starting point

您还可以通过对 'I' 的两半和条形的两侧使用循环来缩短代码。

import turtle


def move_me(trt, step, n):
    while n > 0:
        tmp = trt.heading()
        trt.lt(90)
        trt.fd(step)
        trt.rt(90)
        trt.fd(step)
        move_me(trt, step / 2, n - 1)
        trt.fd(-2 * step)
        move_me(trt, step / 2, n - 1)
        trt.fd(step)
        trt.rt(90)
        trt.fd(2 * step)
        trt.rt(90)
        trt.fd(step)
        move_me(trt, step / 2, n - 1)
        trt.fd(-2 * step)
        move_me(trt, step / 2, n - 1)
        trt.fd(step)
        trt.rt(90)
        trt.fd(step)
        n -= 1
        trt.seth(tmp)

my_win = turtle.Screen()
my_turtle = turtle.Turtle()
my_turtle.speed(10)
move_me(my_turtle, 200, 3)