Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 8, 2012 18:08:03

Avond
От: Киев
Зарегистрирован: 2012-11-03
Сообщения: 16
Репутация: +  -1  -
Профиль   Отправить e-mail  

Рекурсии и циклы

Уважаемые форумчане, обьясните пожалуйста новичку, в чем разница рекурсии и цикла. И что лучше использовать? Лично мне показалось, что использование циклов более целесообразно… это не так?



Старый баг - лучше новых двух!:D (с) Народная программерская поговорка

Офлайн

#2 Ноя. 8, 2012 18:37:58

pellon
Зарегистрирован: 2012-10-29
Сообщения: 98
Репутация: +  -1  -
Профиль   Отправить e-mail  

Рекурсии и циклы

а мне скажите что такое рекурсия?

Офлайн

#3 Ноя. 8, 2012 19:00:10

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Рекурсии и циклы

Лутц писал, что рекурсия в python используется довольно редко.
Рекурсивные функции - функции, которые могут вызывать сами себя, прямо или косвенно, образуя цикл.
Этот прием позволяет реализовывать обход структур данных с произвольной и неизвестной заранее организацией.

Офлайн

#4 Ноя. 8, 2012 20:20:58

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Рекурсии и циклы

питон тут непричем, есть данные, которые рекурсивны по своей природе, их и проще обработать с помощью рекурсии. В простейшем случае наверно так.

Офлайн

#5 Ноя. 8, 2012 20:42:13

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

Рекурсии и циклы

некоторые задачи решаются гораздо проще с помощью рекурсии, но вызов функции - это дополнительные расходы системных ресурсов. В питоне есть ограничение на количество вложенных вызовов, по умолчанию - 1000.

Офлайн

#6 Ноя. 8, 2012 21:22:39

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Рекурсии и циклы

Ограничение можно изменить. Используется метод: sys.setrecursionlimit(N), где N - глубина рекурсии.
Если чесно, я ею редко пользуюсь. В основном, чтобы не писать дополнительные функции обработки событий в Tkinter…



Офлайн

#7 Ноя. 8, 2012 21:33:58

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Рекурсии и циклы

4kpt
В основном, чтобы не писать дополнительные функции обработки событий в Tkinter…
это как?

Офлайн

#8 Ноя. 8, 2012 21:38:02

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Рекурсии и циклы

Событие перехватывается, обрабатывается, производит опреедленные действия (можно даже вне функции), которые, в свою очередь приводят к возвращению к первой функции, но с иными параметрами. Функция их снова обрабатывает данные, но с новыми значения, производит определенные действия, которые, в свою очередь приводят к возвращению опять к функции……….

Хотя это может быть и не прямая рекурсия (функция вызывает сама себя через промежуточную функцию).



Отредактировано 4kpt (Ноя. 8, 2012 21:39:32)

Офлайн

#9 Ноя. 8, 2012 22:11:53

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

Рекурсии и циклы

Рекурсивные алгоритмы сложнее отлаживать, но порой они позволяют очень гибко и красиво решить задачу. Известно, что любой рекурсивный алгоритм можно заменить нерекурсивным, но это скорее всего будет стоить больше времени на реализацию. Рекурсия часто применяется при решении задач с нисходящим динамическим программированием, а так же в переборных задачах. Впервые столкнувшись с понятием рекурсии возникает вопрос: а не будет ли функция вызывать себя бесконечно? Здесь нужно понять, что рекурсивная функция не должна вызывать себя всегда, иначе программа работать не сможет. При реализации рекурсивных алгоритмов необходимо уделять внимание тому, чтобы алгоритм был конечным, т.е. выполнение рекурсивной функции должно когда-нибудь завершиться.

http://acmp.ru/article.asp?id_sec=1&id_text=1333



Офлайн

#10 Ноя. 8, 2012 23:13:20

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Рекурсии и циклы

Рекурсия плоха тем (как уже заметили), что самовызов функции серьезно нагружает машину. А так как существуют методы, которые позволяют снижать нагрузку при циклах (функции модуля itertools) то использование рекурсии должно быть ОЧЕНЬ и ОЧЕНЬ оправлданным. Повторюсь, я использую когда мне рельно лень и я заню, что не сильно насилую машину…



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version