|
|
|
Рекурсия: как выделяется память под рекурсивный вызов?02.09.2011, 18:49. Показов 9438. Ответов 24
Метки нет (Все метки)
на картинке файлик из википедии в которой говорится что рекусия имеет вид дерева и некоторые ветви могут вычислятся по многу раз. А как это реализованно в с++? то же с повторениями?
И как выделяется память под рекусивный вызов? Например есть функция с набором локальных переменных - они будут жить до тех пор пока не завершится функция, т.е. так долго пока не будет выход из рекурсии? и мы будем иметь большое множество участков в памяти с одинакововой структурой данных(но разными значениями)?
0
|
|
| 02.09.2011, 18:49 | |
|
Ответы с готовыми решениями:
24
Как выделяется память под массив string?
Как выделяется память под структуры? |
|
Заблокирован
|
|
| 02.09.2011, 18:54 | |
|
в С++ можно очень быстро выйти из рекурсии выбросив исключение. Ну например при рекурсивном поиске, не будет цепочки ретурнов
0
|
|
|
|
|
| 02.09.2011, 18:56 [ТС] | |
|
LosAngeles, а повторы есть? неужто не обошли это и рекурсия вызывает лавинообразный рост расчета одних и тех же значений?
0
|
|
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 02.09.2011, 19:00 | |
|
Дерево похоже на вычисление чисел Фибоначчи. Да повторы будут. Это хорошо видно вот в этой задаче про бесконечные последовательности.
1
|
|
|
Higher
|
||
| 02.09.2011, 19:00 | ||
|
LosAngeles, исключения нужны, чтобы оповещать о ошибке, не более. Даже goto лучше будет. Но гораздо красивее просто цепочка return(а кроме красоты у рекурсии преимуществ мало).
2
|
||
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
||
| 02.09.2011, 19:00 | ||
|
1
|
||
|
Заблокирован
|
|||
| 02.09.2011, 19:14 | |||
|
в общем случае нет никаких повторов, не понимаю о чём ты. Просто слишком велики издержки на вызов функций и в конце придётся кучу ретурнов пройти и если задача сводится к поиску чего-либо, то это как я говорил решается с помощью throw. Вообщем рекурсия медленее итераций и больше жрёт стека
Добавлено через 13 минут
1
|
|||
|
Higher
|
||
| 02.09.2011, 19:18 | ||
|
Ален Голуб, "Веревка достаточной длины, чтобы прострелить себе ногу" - начиная от 159 пункта.
1
|
||
|
Заблокирован
|
|
| 02.09.2011, 19:23 | |
|
0
|
|
|
|
||||||
| 02.09.2011, 19:26 [ТС] | ||||||
Сообщение было отмечено как решение
Решение
LosAngeles, да видимо по сути своей она так организована что повторяется в вычислениях если их не сохранить как в примерах выше.
вопрос
0
|
||||||
| 02.09.2011, 19:27 | |||
|
Не по теме:
P.S. цепочка return еще и эффективнее должна быть.
0
|
|||
|
Заблокирован
|
|
| 02.09.2011, 19:36 | |
|
14.1.1 страница 410
Добавлено через 1 минуту и 14.5 страница 427 Добавлено через 2 минуты вот именно в ней и говорится что исключения стоит применять в глубоко рекурсивных функциях поиска, например по дереву. Цитирую: "элегантный способ"
0
|
|
|
|
|
| 02.09.2011, 19:37 [ТС] | |
|
хорошо, как подняться с большой глубины рекурсии минуя цепь return?
кроме throw
0
|
|
|
|
||
| 02.09.2011, 19:39 | ||
|
0
|
||
|
Заблокирован
|
|
| 02.09.2011, 19:39 | |
|
никак
0
|
|
|
|
||
| 02.09.2011, 19:45 [ТС] | ||
|
Thinker, вот в чем дело. подозреваю что из за повторных вычислений я получаю на выходе некое неверное значение. тот пример что я привел - постарался выразить некие опасения, есть в таком варианте повторы или нет? рекурсия в цикле. И вообще мож это в корне неверно мешать одно с другим? В том примере выход из рекурсии - когда вектор пуст. После этого начнутся return
Добавлено через 1 минуту А как это все лежит в памяти, что с автопеременными, когда я ушел вглубь из функции?
0
|
||
|
Заблокирован
|
|
| 02.09.2011, 19:47 | |
|
от старших адресов к младшим. Чем глубже тем младше адрес, это же стек
1
|
|
|
|
||||
| 02.09.2011, 19:49 | ||||
|
1
|
||||
|
|
|
| 02.09.2011, 19:49 [ТС] | |
|
LosAngeles, логично и автопеременные живут каким то образом. получается динамическое заполнение стэка? Для каждого вызова в глубь новый адрес под тело?
0
|
|
| 02.09.2011, 19:49 | |
|
Помогаю со студенческими работами здесь
20
Не выделяется память под массив
Где выделяется память под объекты Почему не выделяется память под двумерный массив? Когда выделяется память под переменные - во время объявления или инициализации Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|