Здравствуйте. Решил поиграть в черепашку на питоне и в один момент захотелось написать фрактал Коха, а именно его снежинку. В процессе завис, ничего не понял, зашел в гугл и нашел её код (снизу).
Знающие люди, объясните пожалуйста принцип работы по которому черепашка рисует один из фрагментов снежинки. Как думал я:
1) f(300,2). d не равно 0, идем по else. f(l/3, d-1), черепашка проделывает первый путь длиной 100 единиц, d становится равен 1 (и так до самого конца, от исходного значения отнимается 1). делает угол 60° влево. И так далее сверху вниз. Но это неправильный ход мыслей, т.к. скорее всего функция вызывает саму себя и цикл будет идти с самого начала.
2) f(300,2). d не равно 0, идем по else. 300/3 = 100, d = 2-1 = 1. проходим путь длиной 100, функция вызывает саму себя, d=1-1=0, проходим по if d == 0, рисуется линия длиной 100. конец.
Скорее всего что проблема в том что я абсолютно не понимаю работы циклов/функций в питоне, так что помогите пожалуйста мне понять.
>>1319311 ну кароч это называеться рекурсией. d - в моём случае это уровень детализации рисунка. В рекукрсионных ф-иях обычно принято, чтобы она принимала любое чило к примеру и оканчивала вызывать себя при достижение его нуля (в моём случае единице) ХЗ, кароч гугли рекурсия
Знающие люди, объясните пожалуйста принцип работы по которому черепашка рисует один из фрагментов снежинки. Как думал я:
1) f(300,2). d не равно 0, идем по else. f(l/3, d-1), черепашка проделывает первый путь длиной 100 единиц, d становится равен 1 (и так до самого конца, от исходного значения отнимается 1). делает угол 60° влево. И так далее сверху вниз. Но это неправильный ход мыслей, т.к. скорее всего функция вызывает саму себя и цикл будет идти с самого начала.
2) f(300,2). d не равно 0, идем по else. 300/3 = 100, d = 2-1 = 1. проходим путь длиной 100, функция вызывает саму себя, d=1-1=0, проходим по if d == 0, рисуется линия длиной 100. конец.
Скорее всего что проблема в том что я абсолютно не понимаю работы циклов/функций в питоне, так что помогите пожалуйста мне понять.
import turtle
turtle.speed(0)
def f(l,d):
\tif d==0:
\t\tturtle.forward(l)
\telse:
\t\tf(l/3, d-1)
\t\tturtle.left(60)
\t\tf(l/3, d-1)
\t\tturtle.right(120)
\t\tf(l/3, d-1)
\t\tturtle.left(60)
\t\tf(l/3, d-1)
f(300,2)
turtle.done()