Рисование пирамиды с использованием рекурсии - PullRequest
0 голосов
/ 09 мая 2020

Я хочу создать класс пирамиды рекурсивно, используя cs1graphics. Этот класс позволит пользователю указать количество уровней и общую ширину пирамиды.

cs1graphics module: https://github.com/otfried/cs101/blob/master/modules/cs1graphics.py

Я могу сделать это, используя для l oop но я не знаю, как использовать рекурсию для достижения того же.

Вот код, который я использую:

from cs1graphics import *

numLevels = 8
unitSize = 12
screenSize = unitSize * (numLevels + 1)
paper = Canvas(screenSize, screenSize)

centerX = screenSize / 2.0

for level in range(numLevels):
   centerY = (level + 1) * unitSize
   leftmostX = centerX - unitSize * level / 2.0
   for blockCount in range(level + 1):
       block = Square(unitSize)
       block.move(leftmostX + unitSize * blockCount, centerY)
       block.setFillColor('gray')
       paper.add(block)

Это моя попытка:

class Pyramid(Drawable):
    def __init__(self, numLevels, unitSize):
        screenSize = self.unitSize * (self.numLevels + 1)
        paper = Canvas(screenSize, screenSize)
        centerX = screenSize / 2.0

Не знаю, как пройти остаток урока.

1 Ответ

0 голосов
/ 09 мая 2020

должно работать что-то вроде этого: в вашем init сохраните всю информацию как переменные класса и вызовите рекурсивную функцию, которая обновляет текущий уровень. Когда уровень достигает базового значения (например, достигает 0, если вы ведете обратный отсчет, или numLevels, если вы считаете, как здесь), прекратите повторение.

from cs1graphics import *
class Pyramid(Drawable):
    def __init__(self, numLevels, unitSize):
      self.numLevels = numLevels
      self.currentlevel = 0
      self.unitSize = unitSize
      self.screenSize = unitSize * (numLevels + 1)
      self.paper = Canvas(screenSize, screenSize)
      self.centerX = screenSize / 2.0
      self.draw_pyramid()

    def draw_pyramid(self):
       centerY = (self.currentlevel + 1) * self.unitSize
       leftmostX = self.centerX - self.unitSize * self.currentlevel / 2.0
       for blockCount in range(self.currentlevel + 1):
         block = Square(self.unitSize)
         block.move(leftmostX + self.unitSize * blockCount, centerY)
         block.setFillColor('gray')
         self.paper.add(block)
       self.currentlevel += 1
       if self.currentlevel == self.numLevels:
         return
       self.draw_pyramid()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...