dobriy_dada
Я пробовал убирать по одной строке из функции tree, но “дерево” рисуется только при наличии всех строк, это кажется какой-то магией :-) никак не пойму как это работает
Прочитай
описание основных принципов для составления/понимания рекурсивной функции.
dobriy_dada
Но непонятно, как можно было додуматься написать такой код, чтобы он был небольшой и чтобы получилась красивая картинка :-) На мой взгляд сложно додуматься до такого :-(
Сначала пишется функция для самой маленькой веточки, которая там в конце получается. А потом эта функция немного меняется (добавляется развилка), чтобы в одном случае она рисовала маленькую веточку, а в другом - просто переходила.
Важно представлять себе, что это вызовы не одной функции, а разных, сильно похожих друг на друга.
dobriy_dada
вроде в рекурсии укладываются параметры в стек
Не параметры укладываются в стек, а вызовы функции выстраиваются в стек. Рекурсивная функция строит лестницу из своих вызовов, пока на самой нижней ступеньке не произойдёт возврат.
Сначала он делает такой код
import turtle
def tree(branchLen, t):
t.forward(branchLen)
t.right(20)
t.left(40)
t.right(20)
t.backward(branchLen)
def main():
t = turtle.Turtle()
myWin = turtle.Screen()
t.left(90)
t.up()
t.backward(100)
t.down()
t.color("green")
tree(5, t)
myWin.exitonclick()
main()
А потом его дорабатывает
import turtle
def tree(branchLen, t):
t.forward(branchLen)
t.right(20)
t.forward(branchLen)
t.backward(branchLen)
t.left(40)
t.forward(branchLen)
t.backward(branchLen)
t.right(20)
t.backward(branchLen)
def main():
t = turtle.Turtle()
myWin = turtle.Screen()
t.left(90)
t.up()
t.backward(100)
t.down()
t.color("green")
tree(5, t)
myWin.exitonclick()
main()