Не могу понять по какому принципу работает этот код. Это первая часть кода:
* @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);
}
}
}
Получается, этот код работает, он рисует треугольник Серпинского, но я не могу понять по какому принципу.
Что сделает процедура sierpinski
, если из неё убрать рекурсивный вызов?
Она с помощью черепашьих методов нарисует равносторонний треугольник со стороной bok
. Это понятно?
А что делает рекурсивный вызов? Он в каждой вершине рисует треугольник вдвое меньше.
А что делает рекурсивный вызов внутри рекурсивного вызова? Он в каждой вершине половинного треугольника рисует треугольник размеров в четверть.
И так продолжается до тех пор, пока размер не станет слишком мал (срабатывает условие останова рекурсии).
В каком порядке треугольники рисуются? Сначала самый маленький внутри первой вершины. Потом сторона треугольника чуть больше. Потом опять самый маленький, потом сторона побольше, опять маленький, и завершение треугольника побольше, потом сторона третьего с конца и т.д.
Этот порядок (хотя бы размер) стоит вывести в консоль или текстовое окно (что там у Вас доступно), чтобы лучше разобраться, как работает рекурсия.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Скажите, пожалуйста, как правильно считывать данные из FirebaseРаботаю по документации, делаю вроде все так, но выводит 'Database Permission denied'
Проблема с input и библиотекой для маски на input jQuery Mask Plugin