首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >海龟模块的递归(Python3.1)

海龟模块的递归(Python3.1)
EN

Stack Overflow用户
提问于 2013-11-15 15:33:57
回答 1查看 319关注 0票数 3

我有一项作业是我无法掌握的。这对我来说没有任何意义,我甚至不知道我在这一点上是否走对了方向。

到目前为止,我的代码如下:

代码语言:javascript
复制
import turtle

def draw_rectangle(center_x, center_y, width, height, myTurtle):
    myTurtle.penup()
    myTurtle.goto(center_x - width/2, center_y - height/2)
    myTurtle.pendown()
    myTurtle.goto(center_x - width/2, center_y + height/2)
    myTurtle.goto(center_x + width/2, center_y + height/2)
    myTurtle.goto(center_x + width/2, center_y - height/2)
    myTurtle.goto(center_x - width/2, center_y - height/2)


def smallerRec(width, height, level, myTurtle):

    rectangle_art( width/2, -height/2, width/2 , height/2, level-2, myTurtle)
    rectangle_art(-width/2,  height/2, width/2 , height/2, level-2, myTurtle)
    rectangle_art(-width/2, -height/2, width/2 , height/2, level-2, myTurtle)
    rectangle_art( width/2,  height/2, width/2 , height/2, level-2, myTurtle)

def smallerRec3(width, height, level, myTurtle):    
    bottom_y = 25
    top_y = 75

    left_x = 50
    right_x = 150

    rectangle_art( right_x,  top_y,    width/level , height/level, level-3, myTurtle)
    rectangle_art( right_x,  bottom_y, width/level , height/level, level-3, myTurtle)
    rectangle_art( left_x,   top_y,    width/level , height/level, level-3, myTurtle)
    rectangle_art( left_x,   bottom_y, width/level , height/level, level-3, myTurtle)

def rectangle_art(center_x, center_y, width, height, level, myTurtle):

    if  (level <= 1):
        draw_rectangle(center_x, center_y, width, height, myTurtle)
    elif(level == 2):
        draw_rectangle(center_x, center_y, width, height, myTurtle)
        smallerRec(width, height, level, myTurtle)
    elif(level == 3):
        draw_rectangle(center_x, center_y, width, height, myTurtle)
        smallerRec (width, height, level, myTurtle)
        smallerRec3(width, height, level, myTurtle)



def main():
    myTurtle = turtle.Turtle()
    myWindow = turtle.Screen()
    rectangle_art(0, 0, 200, 100, 3, myTurtle)
    myWindow.exitonclick()

main()

这是代码的输出:走出http://puu.sh/5j491.png上面的代码

下面是它应该是什么样子:

赋值http://puu.sh/5j4ds.png

从递归的角度来看,我是不是朝正确的方向前进了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-15 15:49:06

你走在正确的轨道上。

从这个角度来看,我认为您应该去掉您的2个smallerRec方法(尽管smallerRec中的代码仍将被使用)。应该只有一个调用draw_rectangle()的方法--您的rectangle_art方法。

此方法应采用与使用(center_x, center_y, width, height, level, myTurtle)相同的参数。

它应该在x,y of width,height绘制一个矩形。然后,如果level大于0,它应该调用自己4次,在其每个角落绘制一个矩形,其宽度和高度减小,水平降低1(就像您正在做的那样)。

这样,如果您从使用rectangle_art调用level=2开始,它将:

代码语言:javascript
复制
Draw rectangle, level > 0? yes its 2, draw rectangle at each of my corners
  At each level 2 corner:
  Draw rectangle, level > 0? yes its 1, draw rectangle at each of my corners
    At each level 1 corner:
    Draw rectangle, level > 0? no its 0, youre done.

提示:

我很想让x,y引用drawRectangle方法中矩形的中心。因为这样你就可以计算角矩形的坐标,而不知道要绘制的较小矩形的宽度和高度。

如果x,y引用左上角。若要绘制右下角矩形,请调用

代码语言:javascript
复制
drawRectangle(x+width-(newWidth/2), y+height-(newHeight/2), newWidth, newHeight)

如果您更改了drawRectangle方法,以便x,y引用一个矩形的中心,那么就可以绘制您要调用的右下角矩形

代码语言:javascript
复制
drawRectangle(x+width, y+height, newWidth, newHeight)

不过,这两种方法都会奏效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20004671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档