Python龟:递归函数

问题描述:

我很难搞清楚如何创建一个函数,根据用户输入绘制大写的I。如果用户输入为1,则绘制一个I,如果它是2,则绘制2个I,如下所示。Python龟:递归函数

enter image description here

我只能用简单的方法龟手工做的第一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) 
+0

很抱歉,但我们不打算做所有的工作适合你。我们可能会给你一些指示,你必须编写代码,然后显示你做了什么,我们将发表评论。第一个指针:编写一个单独的函数,它将一组坐标作为原点(箭头所在的位置)和一个缩放级别(可能是一个浮点数,默认为1.0)作为参数,并根据参数绘制1级结构。 –

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) 

enter image description here

如果要递归执行此操作,则必须使用不同的参数(例如, “水平”较小,笔画只有一半。确保乌龟在方法的开始和结束时位于相同的位置并朝向相同的方向,然后在角落时再次调用该函数。

下面是一些伪代码

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 

您也可以使代码一点点使用的“我”的两半,酒吧双方回路短。