Форум сайта python.su
0
Здравствуйте, помогите пожалуйста, вот такой код
import turtle def tree(branchLen,t): if branchLen > 5: t.forward(branchLen) t.right(20) tree(branchLen-15,t) t.left(40) tree(branchLen-15,t) 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(75,t) myWin.exitonclick()
tree(branchLen-15,t)
Офлайн
0
в принципе понял, вот такой код нужно составить, чтобы запустить на pythontutor.com
def tree(branchLen): if branchLen > 5: print('вперёд на расстояние',branchLen) print('поворот вправо на 20') tree(branchLen-15) print('поворот влево на 40') tree(branchLen-15) print('поворот вправо на 20') print('назад на расстояние',branchLen) tree(75)
Офлайн
5
tree(75, t)
tree(60, t)
Офлайн
0
r00tl3ss дак это понятно, просто пока для меня сложно увязать это с поворотами и движениями назад и главная сложность - это в какое именно место вставить рекурсию, ведь в коде там аж 2 вставки
Офлайн
857
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()
Отредактировано py.user.next (Май 5, 2016 02:59:35)
Офлайн
0
спасибо большое 
Офлайн