C/C++
В чем прикол рекурсии, если существуют циклы?
Я новичок и ума не приложу, для чего может пригодится рекурсия, если эту же самую функцию выполнит любой цикл.
Попробуйте с помощью циклов обойти содержимое системного диска на своём компьютере и узнаете в чём прикол.
это очень возможно что это вам никогда в жизни не пригодится...
Вы можете сделать цикл двойной вложенности, тройной вложенности и любой другой фиксированной вложенности. А как вы будете делать цикл, для которого число уровней вложенности наперед не известно и определяется во время работы программы?
Задача "Ханойские башни", например, при помощи рекурсии решается а одну строку.
А при помощи циклов надо городить длинный огород! :)))
А при помощи циклов надо городить длинный огород! :)))
Краткий и естественный вид записи выражения, начиная с тех же чисел Фибоначчи
Ну ты только посмотри, как с помощью рекурсии код алгоритмов можно сильно сократить, а некоторые записать в одну строчку. Например, все содержание алгоритма Евклида умещается в одну строчку в Си (опуская проверку порядка записи аргументов)
return(b) ? gcd_rec(b, a % b) : a;
Не то чтобы алгоритм сам по себе большой, он простой и короткий, но так выходит еще короче.
return(b) ? gcd_rec(b, a % b) : a;
Не то чтобы алгоритм сам по себе большой, он простой и короткий, но так выходит еще короче.
Ну например самый быстрый алгоритм сортировки, который так и называется "быстрая сортировка" выполняеся за время логарифм от числа элементов. Там принцим в том что в массиве берется какая-нибудь опорная точка, массив делится на две части относительно ее, потом снова делится, снова делится и так до тех пор пока не отсортируется. Сделать это по моему можно только рекурсией. Циклами, точно не знаю, но вряд ли выйдет.
Сортировки циклами устроены так что есть главный цикл, в нем еще один цикл, который перебирает элементы. Время выполнения получается квадратичным. То есть рекурсия отсортирует массив из 16 элементов за количество шагов - логарифм 16 по основанию 2, то есть за 4 шага. А квадратичная сортировка циклами будет это делать за количество шагов n в квадрате, то есть для 16 будет около 256 шагов
Сортировки циклами устроены так что есть главный цикл, в нем еще один цикл, который перебирает элементы. Время выполнения получается квадратичным. То есть рекурсия отсортирует массив из 16 элементов за количество шагов - логарифм 16 по основанию 2, то есть за 4 шага. А квадратичная сортировка циклами будет это делать за количество шагов n в квадрате, то есть для 16 будет около 256 шагов
Альберт Пигонин
Временная сложность не от самого факта использования рекурсии/цикла зависит, а от принципа работы алгоритма.
Сортировки, использующие рекурсию, можно написать и без рекурсии
Сортировки, использующие рекурсию, можно написать и без рекурсии
Рекурсия позволяет создать ветвление, ведь функция может быть вызвана в себе несколько раз. А цикл по сути линейный.
Иногда некоторую задачу проще реализовать спомощью рекурсии и поддерживать его, вот поэтому и нужны рекурсии.
Любая рекурсивная задача может быть переделана в цикл, но переделывание может занять дорогостоящее время и нервов.
У рекурсии есть свои минусы и плюсы.
Минусы: некоторые компиляторы или интерпретаторы языков программирования, ограничивают количество вызовов функций, например в JavaScript браузером количество вызовов ограничено до 100 тысяч, после чего может выйти ошибка переполнения стека. Рекурсия также требует больше памяти, т.к. каждый вызов функции сохраняется в памяти, до завершения работы самой функции.
Плюсы: Рекурсия позволяет программисту быстрее реализовать определенную задачу, чем пытаться делать её на циклах, это позволяет программисту сэкономить время, но за это приходится платить минусами и ограничениями.
Любая рекурсивная задача может быть переделана в цикл, но переделывание может занять дорогостоящее время и нервов.
У рекурсии есть свои минусы и плюсы.
Минусы: некоторые компиляторы или интерпретаторы языков программирования, ограничивают количество вызовов функций, например в JavaScript браузером количество вызовов ограничено до 100 тысяч, после чего может выйти ошибка переполнения стека. Рекурсия также требует больше памяти, т.к. каждый вызов функции сохраняется в памяти, до завершения работы самой функции.
Плюсы: Рекурсия позволяет программисту быстрее реализовать определенную задачу, чем пытаться делать её на циклах, это позволяет программисту сэкономить время, но за это приходится платить минусами и ограничениями.
Просто есть задачи, в которых решение сделанное рекурсией невозможно заменить циклом. Жаль ток, что мне примеры в голову сейчас не лезут. А так, если есть возможность заменить рекурсию на цикл, это обязательно сделают. Есть еще данные рекурсивные, тоже веселая вещь
Renat Saidov
Любую рекурсию можно заменить циклом.
Похожие вопросы
- Функция на рекурсию. Нужен код на С
- Помогите С++ с цикла for нужно сделать while цикл и do while цикл точнее у меня вышла только с циклом for
- Ввод массива строк с помощью рекурсии
- Задание 4 по Теме Функции. Перегрузка Функций. Рекурсия. На языке программирования C++
- Учу с++, можете объяснить на пальцах? не понимаю работу условия в теле цикла... if ((i+1)%3 != 0)
- Циклы C++. Создание программ с циклическими конструкциями.
- Нужно написать программу с вложенным циклом
- Программа на СИ. Циклы с постусловием и предусловием
- Написание цикла линий
- Объясните работу цикла for в c++
while(stack is not empty):
var currFolder = stack.Pop();
stack.PushMany(currFolder.GetAllSubfolders());
foo(stack.GetAllFiles()); // do action with files