2
我需要一些帮助Python程序。在我的CPS II课程中,我们回顾了如何使用递归创建sierpinski三角形。我认为这很有趣,并在网上寻找更多的话题。我一直在想出使用递归创建sierpinski地毯的代码。我觉得我很接近,但似乎无法完成。我完全不知道问题是什么。谢尔宾斯基地毯递归 - Python的
而且有人问过,这不是功课。我只是试图通过实例来更好地理解递归。
这里是我到目前为止的代码;它只能在深度1工作。然后在深度2工作,但有些是错误的。
from graphics import *
import sys
def sierpinskiCarpet(points, level, window):
if level == 0:
square = Rectangle(points[0], points[1])
square.draw(window)
else:
x_0 = (points[0].getX())
x_02 = (points[1].getX())
x_1 = ((points[1].getX())/3)
x_2 = (((points[1].getX())/3)*2)
y_0 = (points[0].getY())
y_02 = (points[1].getY())
y_1 = ((points[0].getY())/3)
y_2 = (((points[0].getY())/3)*2)
top1 = [points[0], Point(x_1, y_2)]
top2 = [Point(x_1, y_0), Point(x_2, y_2)]
top3 = [Point(x_2, y_0), Point(x_02, y_2)]
med1 = [Point(x_0, y_2), Point(x_1, y_1)]
med3 = [Point(x_2, y_2), Point(x_02, y_1)]
bottom1 = [Point(x_0, y_1), Point(x_1, y_02)]
bottom2 = [Point(x_1, y_1), Point(x_2, y_02)]
bottom3 = [Point(x_2, y_1), points[1]]
sierpinskiCarpet(top1, level - 1, window)
sierpinskiCarpet(top2, level - 1, window)
sierpinskiCarpet(top3, level - 1, window)
sierpinskiCarpet(med1, level - 1, window)
sierpinskiCarpet(med3, level - 1, window)
sierpinskiCarpet(bottom1, level - 1, window)
sierpinskiCarpet(bottom2, level - 1, window)
sierpinskiCarpet(bottom3, level - 1, window)
def main():
#get the depth from the system arguemtns
depth = int(sys.argv[1])
#set up the window using GraphWin
window = GraphWin('Sierpinski Carpet', 500, 500)
#set the corrdiantes of the window
window.setCoords(-0.1, -0.1, 1.1, 1.1)
#list the starting points for the first square
points = [Point(0, 1), Point(1, 0)]
#call the function with the points
sierpinskiCarpet(points, depth, window)
#close the window when clicked
window.getMouse()
main()
这是正确的。但是我发现了另一个错误。 y值平方点分配也需要改变。 top3 = [Point(x_2,y_0),Point(x_02,y_0),Point(x_2,y_1)] top3 = [Point(x_2,y_0) Y_1)] 和 bottom1 = [点(X_0,Y_2),点(X_1,y_02)] bottom2 = [点(X_1,Y_2),点(X_2,y_02)] bottom3 = [点(X_2 ,y_2),points [1]] 这是正确的。感谢您的帮助! – tknickman 2012-02-14 17:32:20