Форум сайта python.su
-1
Уважаемые форумчане, обьясните пожалуйста новичку, в чем разница рекурсии и цикла. И что лучше использовать? Лично мне показалось, что использование циклов более целесообразно… это не так?
Офлайн
-1
а мне скажите что такое рекурсия?
Офлайн
15
Лутц писал, что рекурсия в python используется довольно редко.
Рекурсивные функции - функции, которые могут вызывать сами себя, прямо или косвенно, образуя цикл.
Этот прием позволяет реализовывать обход структур данных с произвольной и неизвестной заранее организацией.
Офлайн
43
питон тут непричем, есть данные, которые рекурсивны по своей природе, их и проще обработать с помощью рекурсии. В простейшем случае наверно так.
Офлайн
18
некоторые задачи решаются гораздо проще с помощью рекурсии, но вызов функции - это дополнительные расходы системных ресурсов. В питоне есть ограничение на количество вложенных вызовов, по умолчанию - 1000.
Офлайн
63
Ограничение можно изменить. Используется метод: sys.setrecursionlimit(N), где N - глубина рекурсии.
Если чесно, я ею редко пользуюсь. В основном, чтобы не писать дополнительные функции обработки событий в Tkinter…
Офлайн
43
4kptэто как?
В основном, чтобы не писать дополнительные функции обработки событий в Tkinter…
Офлайн
63
Событие перехватывается, обрабатывается, производит опреедленные действия (можно даже вне функции), которые, в свою очередь приводят к возвращению к первой функции, но с иными параметрами. Функция их снова обрабатывает данные, но с новыми значения, производит определенные действия, которые, в свою очередь приводят к возвращению опять к функции……….
Хотя это может быть и не прямая рекурсия (функция вызывает сама себя через промежуточную функцию).
Отредактировано 4kpt (Ноя. 8, 2012 21:39:32)
Офлайн
16
Рекурсивные алгоритмы сложнее отлаживать, но порой они позволяют очень гибко и красиво решить задачу. Известно, что любой рекурсивный алгоритм можно заменить нерекурсивным, но это скорее всего будет стоить больше времени на реализацию. Рекурсия часто применяется при решении задач с нисходящим динамическим программированием, а так же в переборных задачах. Впервые столкнувшись с понятием рекурсии возникает вопрос: а не будет ли функция вызывать себя бесконечно? Здесь нужно понять, что рекурсивная функция не должна вызывать себя всегда, иначе программа работать не сможет. При реализации рекурсивных алгоритмов необходимо уделять внимание тому, чтобы алгоритм был конечным, т.е. выполнение рекурсивной функции должно когда-нибудь завершиться.
Офлайн
63
Рекурсия плоха тем (как уже заметили), что самовызов функции серьезно нагружает машину. А так как существуют методы, которые позволяют снижать нагрузку при циклах (функции модуля itertools) то использование рекурсии должно быть ОЧЕНЬ и ОЧЕНЬ оправлданным. Повторюсь, я использую когда мне рельно лень и я заню, что не сильно насилую машину…
Офлайн