Avond
Ноя. 8, 2012 18:08:03
Уважаемые форумчане, обьясните пожалуйста новичку, в чем разница рекурсии и цикла. И что лучше использовать? Лично мне показалось, что использование циклов более целесообразно… это не так?
pellon
Ноя. 8, 2012 18:37:58
а мне скажите что такое рекурсия?
smoke853
Ноя. 8, 2012 19:00:10
Лутц писал, что рекурсия в python используется довольно редко.
Рекурсивные функции - функции, которые могут вызывать сами себя, прямо или косвенно, образуя цикл.
Этот прием позволяет реализовывать обход структур данных с произвольной и неизвестной заранее организацией.
sergeek
Ноя. 8, 2012 20:20:58
питон тут непричем, есть данные, которые рекурсивны по своей природе, их и проще обработать с помощью рекурсии. В простейшем случае наверно
так.
adray
Ноя. 8, 2012 20:42:13
некоторые задачи решаются гораздо проще с помощью рекурсии, но вызов функции - это дополнительные расходы системных ресурсов. В питоне есть ограничение на количество вложенных вызовов, по умолчанию - 1000.
4kpt
Ноя. 8, 2012 21:22:39
Ограничение можно изменить. Используется метод: sys.setrecursionlimit(N), где N - глубина рекурсии.
Если чесно, я ею редко пользуюсь. В основном, чтобы не писать дополнительные функции обработки событий в Tkinter…
sergeek
Ноя. 8, 2012 21:33:58
4kpt
В основном, чтобы не писать дополнительные функции обработки событий в Tkinter…
это как?
4kpt
Ноя. 8, 2012 21:38:02
Событие перехватывается, обрабатывается, производит опреедленные действия (можно даже вне функции), которые, в свою очередь приводят к возвращению к первой функции, но с иными параметрами. Функция их снова обрабатывает данные, но с новыми значения, производит определенные действия, которые, в свою очередь приводят к возвращению опять к функции……….
Хотя это может быть и не прямая рекурсия (функция вызывает сама себя через промежуточную функцию).
GaiveR
Ноя. 8, 2012 22:11:53
Рекурсивные алгоритмы сложнее отлаживать, но порой они позволяют очень гибко и красиво решить задачу. Известно, что любой рекурсивный алгоритм можно заменить нерекурсивным, но это скорее всего будет стоить больше времени на реализацию. Рекурсия часто применяется при решении задач с нисходящим динамическим программированием, а так же в переборных задачах. Впервые столкнувшись с понятием рекурсии возникает вопрос: а не будет ли функция вызывать себя бесконечно? Здесь нужно понять, что рекурсивная функция не должна вызывать себя всегда, иначе программа работать не сможет. При реализации рекурсивных алгоритмов необходимо уделять внимание тому, чтобы алгоритм был конечным, т.е. выполнение рекурсивной функции должно когда-нибудь завершиться.
http://acmp.ru/article.asp?id_sec=1&id_text=1333
4kpt
Ноя. 8, 2012 23:13:20
Рекурсия плоха тем (как уже заметили), что самовызов функции серьезно нагружает машину. А так как существуют методы, которые позволяют снижать нагрузку при циклах (функции модуля itertools) то использование рекурсии должно быть ОЧЕНЬ и ОЧЕНЬ оправлданным. Повторюсь, я использую когда мне рельно лень и я заню, что не сильно насилую машину…