Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
sancho1996
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 55
#1

Что такое рекурсия? Зачем она нужна? - C++

02.07.2013, 19:52. Просмотров 1590. Ответов 41
Метки нет (Все метки)

Объясните пож человеческим языком, что такое Рекурсия.

Я знаю что это вызов функции самой себя.
Но всё равно не могу догнать зачем она нужна.

Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2013, 19:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что такое рекурсия? Зачем она нужна? (C++):

Что такое виртуальная функция и зачем она нужна? - C++
Мне с трудом пришлось понять, пока не прочитал книгу и не проработал код на виртуальных функциях. В этой теме хочу новичкам рассказать,...

Что такое тестирующая программа и зачем она нужна? - C++
Есть задание, Написать функцию для перевода переменной типа long в символьную строку в двоичном представлении ( ltoab( long num, char s)...

Что делает функция compare в коде и зачем она нужна в qsort - C++
Объясните, пожалуйста, что делает функция compare (17 строка) в данном случае и зачем она нужна в qsort? #include <stdio.h> ...

Явная специализация, зачем она нужна?(Шаблоны функций) - C++
Какой смысл в явной специализации, когда есть перегрузка? если можно, и примерчик) я себе уже в голову вбил, и тут надо чем-то тяжелым...

сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь усложнять? - C++
сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь...

Кто-нибудь может подробно объяснить, что такое allocators, зачем это и что с ними делать? Нигде не нашёл инфы - C++
Заранее спасибо.

41
Second
79 / 80 / 1
Регистрация: 10.08.2011
Сообщений: 665
02.07.2013, 20:00 #2
Это одно из многих определений в учебниках, которое крайне редко используется на практике.
В педевикии лаконично описано, но маловероятно повстречать сие в реалиях.
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
02.07.2013, 20:04 #3
Цитата Сообщение от Second Посмотреть сообщение
маловероятно повстречать сие в реалиях.
да ну... та же широко используемая сортировка quicksort рекурсивная. обработка бинарных деревьев чаше всего рекурсивна и многое другое.
0
sancho1996
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 55
02.07.2013, 20:10  [ТС] #4
Цитата Сообщение от Thinker Посмотреть сообщение
да ну... та же широко используемая сортировка quicksort рекурсивная. обработка бинарных деревьев чаше всего рекурсивна и многое другое.
расскажите о рекурсии по подробнее пож
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
02.07.2013, 20:16 #5
sancho1996, это просто вызов функции самой себя. Допустим:
C++
1
2
3
4
5
6
bool f(int x)
{
if (x == 1) return false;
else
f(x - 1);
}
Функция будет вызывать себя -ндцать раз, до тех пор пока не вызовет с числом, равным 1, а затем вызов прекратится.
1
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
02.07.2013, 20:40 #6
Много лишнего для примера..
C++
1
2
3
4
5
void func( int n )
{
    if ( !n ) return; // если n == 0 ...
    func( n - 1 );
}
Собственно, она ничего не делает, просто пример работы рекурсии.
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
02.07.2013, 20:45 #7
Цитата Сообщение от lazybiz Посмотреть сообщение
она ничего не делает, просто пример работы рекурсии.
вот откуда потом появляются фразы типа

Цитата Сообщение от Second Посмотреть сообщение
Это одно из многих определений в учебниках, которое крайне редко используется на практике... маловероятно повстречать сие в реалиях.
0
castaway
02.07.2013, 20:52
  #8

Не по теме:

Thinker, ))))))

0
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
13.05.2017, 09:18 #9
Цитата Сообщение от Thinker Посмотреть сообщение
да ну... та же широко используемая сортировка quicksort рекурсивная. обработка бинарных деревьев чаше всего рекурсивна и многое другое.
Подскажите нужна ли рекурсия в С++
ЕСЛИ её можно заменить for ?
0
dailydose
overmind
345 / 125 / 33
Регистрация: 21.07.2016
Сообщений: 603
13.05.2017, 11:29 #10
Цитата Сообщение от eXPonent Посмотреть сообщение
Подскажите нужна ли рекурсия в С++
ЕСЛИ её можно заменить for ?
очевидно же что нет, ибо stack overflow!
0
Рыжий Лис
Просто Лис
344 / 268 / 80
Регистрация: 17.05.2012
Сообщений: 1,116
Записей в блоге: 4
13.05.2017, 11:47 #11
Цитата Сообщение от eXPonent Посмотреть сообщение
ЕСЛИ её можно заменить for ?
Цитата Сообщение от Thinker Посмотреть сообщение
обработка бинарных деревьев чаше всего рекурсивна
Мне даже интересно стало, как вы будете обходить дерево, используя цикл
1
_liv_
217 / 217 / 83
Регистрация: 07.10.2015
Сообщений: 613
Завершенные тесты: 1
13.05.2017, 12:57 #12
sancho1996, рекурсия используется для работы с данными, у которых структура (объект)
содержит вложенный объект, структурно аналогичный самому себе или (что бывает чаще) ссылку на такой же объект.
И тогда для работы с вложенным объектом просто вызываем самого себя, но с новыми параметрами.
Подобная структура объектов удобно тем, что так можно описать потенциально бесконечную структуру данных.
Подобные структуры используются при описании списков и графов, тех же деревьев.
1
Байт
Эксперт C
16149 / 10427 / 1556
Регистрация: 24.12.2010
Сообщений: 19,759
13.05.2017, 13:28 #13
Цитата Сообщение от eXPonent Посмотреть сообщение
Подскажите нужна ли рекурсия в С++
ЕСЛИ её можно заменить for ?
В принципе, без рекурсии можно обойтись. Вот, Дональд Кнут в своей классической монографии "Искусство программирования" всячески рекурсии избегает. И для задач, в которых рекурсия просто напрашивается (не вычисление факториала! ) просто моделирует стеки. В итоге его алгоритмы выглядят на порядок более громоздкими, чем могли бы быть.

Добавлено через 3 минуты
Ну, а класс задач, в которых применение рекурсии естественно, кратко описал уважаемый _liv_.
А вообще-то и без циклов for можно обойтись, и вообще без циклов. Есть же goto
2
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
13.05.2017, 14:14 #14

Не по теме:

согласен в ассемблере без джампа никак) он по всюду



А об рекурсии я имел ввиду, что она часто память жрут сильно много, даже грамотно написанные, а особенно если случайно допустил ошибку и она сожрет её всю
0
_liv_
217 / 217 / 83
Регистрация: 07.10.2015
Сообщений: 613
Завершенные тесты: 1
13.05.2017, 14:20 #15
Цитата Сообщение от eXPonent Посмотреть сообщение
грамотно написанные
Грамотно написанные - грамотно используют память.
Кривые руки любую программу введут в ступор...
Любой метод - неуниверсален. К каждому типу задач необходимо пременять свой подход.
Рекурсия - не панацея, но порой без нее не обойтись, точнее, без нее намного сложнее...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2017, 14:20
Привет! Вот еще темы с ответами:

Что такое hash-таблицы, и зачем они нужны? - C++
Обьясните пожалуста по простому что такое хеш таблици и зачем они надо... пытался разобратся с ними сам, но ничего не получилось....

Битовые поля структур: что такое и зачем они нужны? - C++
Собственно, вопрос в заголовке. Читал Шилдта, но там эта тема довольно расплывчата. Надеюсь, кто-нибудь сможет доходчиво объяснить.

Что делает данный код и зачем такое кому-нибудь может понадобиться? - C++
Я ответил на вопрос,но точной формулировки не нашёл,хотел бы свериться(приложения с ответами нет).Задание: Чёрный ящик.Что делается в...

Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала - C++
Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
13.05.2017, 14:20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru