Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/42: Рейтинг темы: голосов - 42, средняя оценка - 4.76
14 / 14 / 1
Регистрация: 03.09.2009
Сообщений: 109

Рекурсия VS Цикл

10.11.2009, 13:34. Показов 8655. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь для себя усвоить область рационального применения рекурсии. Требуется помощь.
Давайте рассмотрим на примере некого ряда с рекурсивным соотвношением последующего к предыдущему, ну например есть некий a1=2; ai = 1.325 *ai-1 + 2;(i=2...n)
Задача, допустим найти сумму членов ряда для заданного n.
Можно посчитать по рекурсивному методу, можно по циклу.

Из преимуществ рекурсиии, мне в голову приходит только точность расчета, если речь не идет о целых числах (насколько я понимаю, погрешность округления меньше)
Из недостатков: рекурсия требует намного больше памяти, большее число операций.

Помогите разобраться в тонкостях применения рекурсии. Где и в каких случаях рационально применять. Каковы преимущества.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.11.2009, 13:34
Ответы с готовыми решениями:

Цикл + рекурсия
Суть в чём: нужно подсчитать кол-во членов, больших введенного Е, и их сумму. Вроде, всё правильно написано, но (как всегда) не работает....

Рекурсия через цикл
Вычислить y = x^n по следующему правилу: y = ( x^(n/2) )^2, если n четное и y = x * y^(n–1), если n нечетное Как решить сию задачу...

Цикл в цикле или рекурсия
Привет всем. Есть такая задача, которую никак не могу решить: товары отгружаются дистрибьюторам (A-G) каждый день. Данные, которые есть в...

10
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
10.11.2009, 13:46
Я вижу преимущество рекурсии в том, что некоторые алгоритмы проще реализуются. Например, алгоритмы сортировки.
1
 Аватар для cristaloleg
149 / 50 / 3
Регистрация: 21.12.2008
Сообщений: 960
10.11.2009, 13:54
Итерация - от человека
Рекурсия - от бога
1
1 / 1 / 0
Регистрация: 10.11.2009
Сообщений: 4
10.11.2009, 14:35
"точность расчета"
Причем тут точность рассчета?
А по теме -- любые фибоначчи-подобные последовательности более предпочтительно вычислять с помощью цикла, более сложные алгоритмы (например, динамика по подотрезкам) легче реализовывать рекурсией, т.к. многие из них предполагают нестандартный обход порой многомерного массива.
Во многих задачах можно использовать рекурсивный метод "ленивая динамика", когда для каждого значения функции f(x,y) будет соответствующая ячейка в массиве res[x,y] (или для f(x) -- res[x]), что минимизирует время выполнения за счет использования уже подсчитанных значений.
Например, решение вашей задачи считается приемлемым с рекурсией только если используется ленивая динамика:
в начале программы - a[1]:=1; все остальные a[i] -- -1;
затем, вызов функции f(n);
функция f(i) - integer {
если a[i]=-1 то {
a[i]=1.325*f(i-1)+2;}
f=a[i];}
соответственно, после выполнения программы все a от 1 до n будут забиты соответствующими им значениями.
однако, гораздо лучше просто for i=2 to n a[i]=1.325*a[i-1]+2;
0
14 / 14 / 1
Регистрация: 03.09.2009
Сообщений: 109
10.11.2009, 15:58  [ТС]
Цитата Сообщение от equinoxe Посмотреть сообщение
точность расчета"
Причем тут точность рассчета?
Ну моя логика в этом вопросе, была такая:
Если цикл, то после каждой итеррации получившееся число размещается в переменную (т.к. кол-во знаков переменной фиксировано,то соответсвенено появляется погрешность, связанная с округлением), и так по числу итеррациий, как я думал растет погрешность. В случае с рекурсией логика та же, но там , как я думал, значение в переменную размещается только 1 раз.
Возможно, все это чушь, просвятите как это происходит...
0
1 / 1 / 0
Регистрация: 10.11.2009
Сообщений: 4
10.11.2009, 17:39
результат каждой функции хранится как отдельная переменная (а иначе как вы представляете себе работу рекурсивных функций?).
в некоторых средах есть даже окошко со списком вроде стека функций, где каждый элемент списка представляет собой запись "Название_функции(Аргументы):результ ат"
таким образом, если f(x) = f(y) + f(z), то при подсчете f(x) в памяти хранятся уже три переменные: f(y), f(z) и сам (еще не подсчитанный) f(x).
1
Эксперт С++
 Аватар для Phantom
3189 / 869 / 39
Регистрация: 29.12.2008
Сообщений: 951
10.11.2009, 18:07
Итерация обладает рядом преимуществ: она требует меньше памяти (которое при рекурсии занимает распухающий стек) + меньше машинного времени (опять же рекурсия тратит его на управление стеком). Вообще, программируя рекурсивную программу нужно много чего предусматривать, всякие переполнения и т.д и т.п. На мой взгляд, учитывать это несколько труднее для программиста, нежели имея дело с итерацией.
Уже это обстоятельство (ресурсоемкость) позволяет программисту сделать выбор в пользу итерации, однако, не всё так просто...
Дело в том, что некоторые алгоритмы построить с помощью итерации очень трудно, в то время как с помощью рекурсии - просто и прозрачно. Кроме того, рекурсия более наглядна и не требует объявления дополнительных переменных цикла.

Лично я, когда программирую, где это возможно использую итерацию. И лишь там, где её использование затруднено - рекурсию. Хотя, признаться, очень люблю рекурсию, если красиво её ввернуть в программе, то она действительно "от Бога".
1
14 / 14 / 1
Регистрация: 03.09.2009
Сообщений: 109
10.11.2009, 18:28  [ТС]
Phantom, Да, действительно Оочень уж красива рекурсия, мне она тоже очень нравится.
Поэтому, я и задумался над оправданностью ее применения
0
0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 49
11.11.2009, 12:52
Chipnddail, такие вычисления, как в вашем примере,на мой взгляд, проще и быстрее делать в цикле. А рекурсию надо использовать там, где она действительно нужна, например, при обходе деревьев и т.д.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
11.11.2009, 14:11
Цитата Сообщение от Phantom Посмотреть сообщение
Итерация обладает рядом преимуществ: она требует меньше памяти (которое при рекурсии занимает распухающий стек) + меньше машинного времени (опять же рекурсия тратит его на управление стеком). Вообще, программируя рекурсивную программу нужно много чего предусматривать, всякие переполнения и т.д и т.п. На мой взгляд, учитывать это несколько труднее для программиста, нежели имея дело с итерацией
Однако зачастую итерационные методы требуют динамической работы с памятью, т.к. заранее неизвестно, на какую глубину мы уйдём. В случае рекурсии эта проблема снимается за счёт аппаратного переключения стека в момент вызова процедуры. При этом накладные раскходы на операцию вызова с лихвой компенсируются тем, что не надо возиться с динамической памятью (что на много порядков медленнее)
1
 Аватар для cristaloleg
149 / 50 / 3
Регистрация: 21.12.2008
Сообщений: 960
11.11.2009, 14:15
почти по теме
я долго ломал руки и ноги с бинарным деревом, но как ток взял рекурсию всё как поносом снесло=)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.11.2009, 14:15
Помогаю со студенческими работами здесь

Возможна ли рекурсия или цикл?
Можно ли реализовать такой пример? (циклически и рекурсивно) Пример Задачу надо переносит в текст сообщения!

Цикл vs рекурсия: достоинства и недостатки
народ а скажите пожалуйста какие нибудь недостатки или достоинства за цикл или рекурсию .

Рекурсия vs цикл с точки зрения производительности
Здравствуй, дорогой форум! Написал алгоритм для отображения десятичных чисел в двоичной системе в двух вариантах: с использование...

Рекурсия, Arraylist добавляется значение, цикл foreach
Доброго времени суток, форум, заинтересован в одном алгоритме, суть его такова - ищет соседей по клеточке (x,y) Критерии таковы, если...

что быстрее работает рекурсия или цикл
вопрос чисто академический:) что быстрее работает рекурсия или цикл. замеры производительности ситуацию не прояснили, данные одинаковые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru