Python龟:递归函数
问题描述:
我很难搞清楚如何创建一个函数,根据用户输入绘制大写的I。如果用户输入为1,则绘制一个I,如果它是2,则绘制2个I,如下所示。Python龟:递归函数
我只能用简单的方法龟手工做的第一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)
答
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)
答
如果要递归执行此操作,则必须使用不同的参数(例如, “水平”较小,笔画只有一半。确保乌龟在方法的开始和结束时位于相同的位置并朝向相同的方向,然后在角落时再次调用该函数。
下面是一些伪代码
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
您也可以使代码一点点使用的“我”的两半,酒吧双方回路短。
很抱歉,但我们不打算做所有的工作适合你。我们可能会给你一些指示,你必须编写代码,然后显示你做了什么,我们将发表评论。第一个指针:编写一个单独的函数,它将一组坐标作为原点(箭头所在的位置)和一个缩放级别(可能是一个浮点数,默认为1.0)作为参数,并根据参数绘制1级结构。 –