7 / 7 / 9
Регистрация: 25.02.2013
Сообщений: 237
|
|||||||||||
1 | |||||||||||
Из рекурсивной функции в не рекурсивную23.10.2014, 23:26. Показов 556. Ответов 5
Метки нет Все метки)
(
Есть рекурсивная функция сортировки слиянием.
Нужно переделать на функцию без рекурсий.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
23.10.2014, 23:26 | |
Ответы с готовыми решениями:
5
Разработать программу по алгоритму с использование рекурсивной функции и без использования рекурсивной функции Разработать программу согласно алгоритму с использованием рекурсивной функции и без использования рекурсивной
|
Вездепух
![]() ![]() 10420 / 5692 / 1550
Регистрация: 18.10.2014
Сообщений: 14,018
|
|
23.10.2014, 23:30 | 2 |
А что вы пытались сказать этим бесконечным циклом?
Цикл, следующий за ним не менее бесконечный и еще более бессмысленный.
0
|
7 / 7 / 9
Регистрация: 25.02.2013
Сообщений: 237
|
||||||
23.10.2014, 23:50 [ТС] | 3 | |||||
Я уже понял. Не понимаю я эту рекурсивную запись и не знаю как она работает.
Вот та же запись
Каждый раз когда вызывается Merge мы заново входим в функцию же...
0
|
Вездепух
![]() ![]() 10420 / 5692 / 1550
Регистрация: 18.10.2014
Сообщений: 14,018
|
||||||
24.10.2014, 00:07 | 4 | |||||
Каждый раз, когда мы снова входим в функцию 'mergeSort', мы получаем снаружи новые значения 'begin' и 'end'. И с каждым новым входом значения 'begin' и 'end' все ближе и ближе друг к другу. В один прекрасный момент условие в 'if' перестает выполняться и "бесконечность" заканчивается.
В процитированном вам же кусочке кода следующий вложенный вызов 'mergeSort' получает значение 'split' в качестве значения 'end'. То есть если тупо перевести эту рекурсию на язык цикла, то получится
1
|
7 / 7 / 9
Регистрация: 25.02.2013
Сообщений: 237
|
||||||
24.10.2014, 01:00 [ТС] | 5 | |||||
Этот момент понял, спасибо.
Теперь как в конечном итоге должна выглядеть функция?
Добавлено через 26 минут help, Завтра сдавать,а спать хочется ![]()
0
|
Вездепух
![]() ![]() 10420 / 5692 / 1550
Регистрация: 18.10.2014
Сообщений: 14,018
|
|||||||||||
24.10.2014, 04:57 | 6 | ||||||||||
Вот моя попытка "буквальной" трансляции вашего рекурсивного кода в циклический. Но буквальная трансляция потребовала, к сожалению, использование "ручного" стека для запоминания промежуточных данных. В общем, взгляните - устроит вас такой вариант или нет
Добавлено через 3 часа 25 минут Отдельно стоит добавить, что вы не привели кода функции 'merge'. Однако ее можно заменить вызовом стандартной функции 'std::inplace_merge' из <algorithm>. Тогда в вышеприведенном коде ее вызов будет выглядеть как
1
|
24.10.2014, 04:57 | |
Помогаю со студенческими работами здесь
6
Написание рекурсивной функции Использование рекурсивной функции Работа рекурсивной функции Задача по рекурсивной функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |