57 / 57 / 10
Регистрация: 08.12.2013
Сообщений: 257
|
|
1 | |
В чем разница между Рекурсией и Итерацией?29.12.2013, 17:53. Показов 2593. Ответов 13
Метки нет Все метки)
(
Рекурсия позволяет сэкономить время но требует больше памяти, а циклы длятся дольше рекурсии но при этом занимают меньше памяти? Я правильно понимаю?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
29.12.2013, 17:53 | |
Ответы с готовыми решениями:
13
Объясните, пожалуйста, чайнику разницу между рекурсией, корекурсией и итерацией В чем разница между С и С++
|
║XLR8║
|
|
29.12.2013, 17:59 | 2 |
Абсолютно неправильно.
Дело в том что вызов функции занимает определенное время, да и функция должна как-то вернуть значение. А обычный цикл требует меньше acm кода, из-за чего и получается + в производительности. Рекурсии уступают по всем параметрам циклам кроме удобности и читаемости кода.
2
|
Диссидент
![]() 26614 / 16562 / 3621
Регистрация: 24.12.2010
Сообщений: 36,950
|
|
29.12.2013, 18:07 | 3 |
ИМХО, не совсем. Рекурсия и времени требует, как правило, больше (Накладные расходы на вызов функции).
Просто рекурсия красивше. И есть задачи, которые более осмысленно и понятно решаются с помощью рекурсии. Например, синтаксический разбор. Решать же задачи типа вычисления факториала или нахождения числа Фибонначи через рекурсию в серьезном практическом программировании - не советую. Там где можно свести к иттерации - сводите.
1
|
57 / 57 / 10
Регистрация: 08.12.2013
Сообщений: 257
|
|
29.12.2013, 18:08 [ТС] | 4 |
а зачем тогда придумали рекурсию?
0
|
29.12.2013, 18:10 | 6 |
Обязательно к прочтению
Структура и интерпретация компьютерных программ Есть различные виды рекурсии, и некоторые из них современные компиляторы оптимизируют.
1
|
57 / 57 / 10
Регистрация: 08.12.2013
Сообщений: 257
|
||||||
29.12.2013, 18:10 [ТС] | 7 | |||||
хм.. только что додумался проверить это - позасекать время. И рекурсия справляется быстрее
![]()
0
|
║XLR8║
|
|
29.12.2013, 18:13 | 8 |
Кроме того есть функциональные языки программирования, С++ считается итеративным языком программирования, но в текущее время он все больше и больше подхватывает фич именно функциональных языков, т.к. они обладают значительно вышей удобностью в написании и чтении\понимании кода.
Добавлено через 1 минуту Далеко не оптимальный вариант. Префиксная инкрементация работает быстрее. ++i
0
|
║XLR8║
|
|||||||||||||||||||||
29.12.2013, 19:29 | 10 | ||||||||||||||||||||
Ладно, что-бы сравнять шансы запустим сначала итерацию, потом рекурсию и опять итерацию, замеряя только 4 точки. Далее будем замерять время выполнения элементраной вычислительной операции, что-бы убрать все посторонние факторы и запустим цикл на 10^7 вызовов.
Вот еще один пример с раскручиваемой хвостовой рекурсией:
Добавлено через 22 минуты Погуглил инфу о хвостовых рекурсиях, такая рекурсия считается хвостовой (т.к. компилятор может раскрутить только хвостовою рекурсию, которая после оптимизаций не будет использовать стек) и запутался (: Момент с задержками на вызов функции я показал. Есть еще момент с ограничением стека, но люди его обходят использую опять таких именно хвостовые рекурсии.
2
|
57 / 57 / 10
Регистрация: 08.12.2013
Сообщений: 257
|
|
29.12.2013, 20:10 [ТС] | 11 |
первый раз слышу, даже если так, то насколько быстрее? наверняка меньше одной милисек. но понимать префиксную инкрментацию сложнее
0
|
:)
![]() 4771 / 3265 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
29.12.2013, 20:16 | 12 |
Для простых типов (например, int) никакой разницы в упомянутом цикле не будет. Для сравнение - посмотрите на ассемблерный выхлоп.
А вот если используется какой-то сложный класс итератора, то использовании постфиксной формы инкремента повлечет за собой создание временного объекта.
2
|
30.12.2013, 10:13 | 13 |
У
Герба Саттера в "Решение сложных задач на С++" есть ремарка по оптимизации инкремента компилятором. При некоторых условиях компилятор может и итератор оптимизировать.
0
|
Tulosba
|
30.12.2013, 11:32
В чем разница между Рекурсией и Итерацией?
#14
|
0
|
30.12.2013, 11:32 | |
В чем разница между [] и * ? В чем разница между \n и \r
В чём разница между .each() и $.each() Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |