Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Unskill
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 6
#1

Пояснить работу рекурсивной функции

16.02.2017, 21:25. Просмотров 164. Ответов 3
Метки нет (Все метки)

Ребят, может кто-нибудь объяснить тугодуму принцип работы этой функции, потому что я что-то сам никак...
C++
1
2
3
4
5
6
7
8
double maxs(double* a, int n)
{
 if (n == 0)
 return a[0];
 double r1 = maxs(a, n / 2);
 double r2 = maxs(a + n / 2 + 1, n - 1);
 return max(r1, r2);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2017, 21:25
Ответы с готовыми решениями:

Объясните работу рекурсивной функции из книги Г. Шилдта
Здравствуйте.Вопрос такой ,самостоятельно изучаю с++ по книге Герберта...

Написать функции рекурсивной и не рекурсивной реализации алгоритма Евклида нахождения наибольшего общего делителя (НОД) двух натуральных чисел
Написать функции рекурсивной и не рекурсивной реализации алгоритма Евклида ...

Пояснить работу цикла
Привет всем Ребята помогите расскажите мне как работает этот Код точнее команда...

Нужно пояснить работу с потоками ofstream, ifstream, fstream
Лектор не поставил коментариев, а я сейчас как дурак сижу разшифровую....

Пояснить работу программы, которая складывает элементы введённого числа между собой
Вот нашёл программу которая слаживает элементы введённого числа между собой.Я...

3
Photofenix
61 / 61 / 39
Регистрация: 18.11.2016
Сообщений: 512
Завершенные тесты: 1
16.02.2017, 21:50 #2
Я не эскперт, но все же попробовал.
C++
1
2
3
4
5
6
7
8
double maxs(double* a, int n) // Функция с указателем на массив.
{
 if (n == 0) // Если вещественное число равно нулю.
 return a[0]; // Вернуть нулевой элемент массива.
 double r1 = maxs(a, n / 2); // Переменной ri присваеваем, переменную с выражением (массив, число деленное на два)
 double r2 = maxs(a + n / 2 + 1, n - 1); // Почти тоже самое.
 return max(r1, r2); // Венуть переменные r1, r2.
}
0
Байт
Эксперт C
18100 / 11957 / 2483
Регистрация: 24.12.2010
Сообщений: 24,088
16.02.2017, 21:58 #3
Ищется максимум в массиве a, состоящем из n+1 элементов
Если n==0 (один элемент) он и возвращается
В противном случае массив разбивается на 2. Ищется максимум в первой половине и во второй. Из них выбирается наибольший.
Для понимания работы функции возьмите массив a[4] = { 10, 2, 14, 8 }, n = 3 и вручную (на бумажке) прокрутите работу функции

Добавлено через 5 минут
Цитата Сообщение от Photofenix Посмотреть сообщение
if (n == 0) // Если вещественное число равно нулю.
*return a[0]; // Вернуть нулевой элемент массива.
Чуток не так. Если остался только 1 элемент (n - количество элементов - 1), то именно этот элемент (a[0]) и возвращается. Он является максимальным, ибо его не с чем сравнить.

Не по теме:

Прошу прощения у модераторов, что не обернул тегами цитируемый код, так как тут мне было важно выделение. Вы же видите - я стараюсь!:)

0
OlafNestandart
54 / 54 / 31
Регистрация: 24.10.2016
Сообщений: 186
16.02.2017, 22:00 #4
Понять работу рекурсии легко, если понять что некоторые подзадачи можно опять свести к исходной задаче.
Например, как здесь - имеем массив и его длину, нужно получить максимальный элемент в массиве. Окей, разобьем его пополам - теперь задача сводится к следующему - имеем 2 массива, нужно узнать максимальный элемент каждого массива (строки 5 и 6), далее из этих двух результатов нужно опять узнать максимум (строка 7). То есть, мы свели задачу практически к идентичной.
Теперь подумаем, когда это деление должно закончится - очевидно, когда размер массива равен единице - делить дальше то некуда. Поэтому просто возвращаем это единственное значение - оно ведь максимальное в массиве размером 1 элемент (строки 3 и 4).
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2017, 22:00

Из рекурсивной функции в не рекурсивную
Есть рекурсивная функция сортировки слиянием. Нужно переделать на функцию без...

Выход из рекурсивной функции
Какие существуют способы выхода из рекурсивной функции? Читал про try & catch и...

Использование рекурсивной функции
Вычислить сумму 12 членов рекуррентной последовательности(вложения) Для...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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