|
2 / 2 / 0
Регистрация: 15.05.2019
Сообщений: 110
|
||||||
Линейный поиск(рекурсия)15.05.2019, 13:10. Показов 5469. Ответов 27
Метки нет (Все метки)
Добрый день.
Разбираюсь с рекурсией, и столкнулся с некоторой проблемой. У Дейтлов есть задача по написанию программы линейного поиска с помощью рекурсии. Написал прогу, все работает. Но судя по всему нет полноценной рекурсии. То есть функция поиска вызывает сама себя, но если пройти пошагово в отладчике, то видно что рекурсия, как бы это правильней сказать, обратно не собирается. Не подскажите в чем тут проблема?
0
|
||||||
| 15.05.2019, 13:10 | |
|
Ответы с готовыми решениями:
27
линейный поиск Линейный поиск с 2 указателями |
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 15.05.2019, 13:14 | |||||||
|
value=lineSearch(array,sizeArray - 1);
1
|
|||||||
|
2 / 2 / 0
Регистрация: 15.05.2019
Сообщений: 110
|
||
| 15.05.2019, 13:24 [ТС] | ||
|
запуск функции первый рекурсивный вызов функции второй рекурсивный вызов функции третий рекурсивный вызов функции сработало терминальное условие возврат в функцию вызова(2) возврат в функцию вызова(1) возврат в функцию переход в main, вывод результата. А в моем случае происходит: запуск функции первый рекурсивный вызов функции второй рекурсивный вызов функции третий рекурсивный вызов функции сработало терминальное условие переход в main, вывод результата.
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 15.05.2019, 13:28 | |
|
0
|
|
|
2 / 2 / 0
Регистрация: 15.05.2019
Сообщений: 110
|
||
| 15.05.2019, 13:37 [ТС] | ||
|
Пишу в Code::Blocks 17.12 Но я в этой IDE запускал проги с нормально работающей рекурсией, там все ок(факториал например) Добавлено через 3 минуты Сейчас проверил твое предложенное исправление, все нормально работает. В чем ньюанс, не пойму.
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 15.05.2019, 13:38 | |||||||
|
А вообще, если что-то смущает, сделай
0
|
|||||||
|
2 / 2 / 0
Регистрация: 15.05.2019
Сообщений: 110
|
||
| 15.05.2019, 13:50 [ТС] | ||
|
Сейчас проверил твое предложенное исправление, все нормально работает. В чем ньюанс, не пойму.
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 15.05.2019, 13:52 | ||
|
1
|
||
|
2 / 2 / 0
Регистрация: 15.05.2019
Сообщений: 110
|
|||||||
| 16.05.2019, 12:00 [ТС] | |||||||
|
[CPP]
Начал решать следующую задачу, и опять на такую же непонятку наткнулся. Рекурсивный бинарный поиск. Программа результат выдает правильный. При пошаговом проходе отладчиком видно, в случае когда ключ больше среднего значения и функция идет по if, при срабатывании терминального условия, все до этого вызванные рекурсивно функции, закрываются. А вот если ключ меньше среднего значения, и функция идет по else, то при срабатывании терминального условия, ничего не закрывается, а идет сразу выход в main, и вывод результата. То есть получается весь стек рекурсивно вызванных функций, так и остался висеть не закрытый. Странно как-то...
0
|
|||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 16.05.2019, 12:20 | |||||||
0
|
|||||||
|
2 / 2 / 0
Регистрация: 15.05.2019
Сообщений: 110
|
|||
| 16.05.2019, 12:30 [ТС] | |||
|
[CPP]
Включаю окно стек вызовов. При срабатывании if, по очереди функции по одной в стек загружаются и после терминального условия по одной выгружаются. А при else, по одной загружаются, а при срабатывании терминального условия, все сразу закрываются,остается только main. P.S. А зачем return там? Вроде все функциионирует правильно.
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 16.05.2019, 12:34 | |||
|
Добавлено через 1 минуту
0
|
|||
|
2 / 2 / 0
Регистрация: 15.05.2019
Сообщений: 110
|
||
| 16.05.2019, 12:48 [ТС] | ||
|
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 16.05.2019, 12:55 | ||
|
Ты рекурсивно вызываешь binarySearch, несколько раз, и последний вызов делает return XXX. А первый (и остальные) - ничего возвращает! Однако тебе нужен результат именно первого вызова cout<<binarySearch(array,start,arraySize ,key);. Откуда он должен его взять? В общем случае тебе вернётся мусор, здесь - просто повезло.
1
|
||
|
2 / 2 / 0
Регистрация: 15.05.2019
Сообщений: 110
|
|||||||
| 16.05.2019, 13:22 [ТС] | |||||||
|
вот к примеру рекурсивная печать массива:
Но если я добавлю retrun перед рекурсивным вызовом функции, то ничего не напечатается.
0
|
|||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 16.05.2019, 13:27 | |||
|
0
|
|||
|
|
|||||||
| 16.05.2019, 13:32 | |||||||
0
|
|||||||
|
2 / 2 / 0
Регистрация: 15.05.2019
Сообщений: 110
|
|
| 16.05.2019, 14:01 [ТС] | |
|
Спасибо.
0
|
|
|
2 / 2 / 0
Регистрация: 15.05.2019
Сообщений: 110
|
|||||||||||
| 17.05.2019, 13:23 [ТС] | |||||||||||
|
Блин, и все равно непонятные для меня вещи происходят.
Продолжаю рекурсивные задачи из книги Дейтлов решать, и у меня опять через просмотр стека, видно что как-то странно закрывается рекурсия. При чем в моих вариантах решения. Поиск минимального числа в массиве(рекурсия): В моем варианте закрываются все сразу, в варианте опытного форумчанина закрывается нормально(по одной функции в обратном порядке) Все запускаю в одной и той же IDE с одними и теми же настройками. Я как-то неправильно подхожу к решению рекурсии что-ли, не пойму(( Мой вариант:
0
|
|||||||||||
|
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
|
||||||
| 17.05.2019, 14:21 | ||||||
0
|
||||||
| 17.05.2019, 14:21 | |
|
Помогаю со студенческими работами здесь
20
Линейный поиск в потоках Линейный поиск в массиве
Линейный поиск в массиве Линейный поиск в массиве структуры Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|