Не могу понять принцип работы кода, Треугольник Серпинского

185
16 февраля 2019, 18:10

Не могу понять по какому принципу работает этот код. Это первая часть кода:

    * @author ZTILabPI  */ public class Main {
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            TurtleAlgorithms alg = new TurtleAlgorithms();
            alg.positioningTurtle(30); 
//        alg. sierpinski(bok, minBok);
            alg.sierpinski(200, 50); 
//        alg.callSnowFlake(3, 400); 
//        alg.snowFlake(3, 400);
        }
     }

Это вторая часть кода:

package Turtle;

import turtlePck.TurtleGraphicsWindow;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author ZTILabPI
 */
public class TurtleAlgorithms extends TurtleGraphicsWindow{
    public void positioningTurtle(int angle){
        right(angle);
    }

    public void sierpinski(int bok, int minBok ){
         if (bok<minBok) {
            return;
        }
          for(int i=1;i<4;i++){
              sierpinski(bok/2, minBok);
              forward(bok);
              right(120);
          }
      }
}

Получается, этот код работает, он рисует треугольник Серпинского, но я не могу понять по какому принципу.

Answer 1

Что сделает процедура sierpinski, если из неё убрать рекурсивный вызов?

Она с помощью черепашьих методов нарисует равносторонний треугольник со стороной bok. Это понятно?

А что делает рекурсивный вызов? Он в каждой вершине рисует треугольник вдвое меньше.

А что делает рекурсивный вызов внутри рекурсивного вызова? Он в каждой вершине половинного треугольника рисует треугольник размеров в четверть.

И так продолжается до тех пор, пока размер не станет слишком мал (срабатывает условие останова рекурсии).

В каком порядке треугольники рисуются? Сначала самый маленький внутри первой вершины. Потом сторона треугольника чуть больше. Потом опять самый маленький, потом сторона побольше, опять маленький, и завершение треугольника побольше, потом сторона третьего с конца и т.д.
Этот порядок (хотя бы размер) стоит вывести в консоль или текстовое окно (что там у Вас доступно), чтобы лучше разобраться, как работает рекурсия.

READ ALSO
Как считать данные из базы Firebase?

Как считать данные из базы Firebase?

Скажите, пожалуйста, как правильно считывать данные из FirebaseРаботаю по документации, делаю вроде все так, но выводит 'Database Permission denied'

169
Скачет содержимое flex

Скачет содержимое flex

ИзвиняюсьПеределал немного

230
Проблема с маской для input

Проблема с маской для input

Проблема с input и библиотекой для маски на input jQuery Mask Plugin

188