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

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

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

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

16.02.2017, 21:25. Просмотров 142. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пояснить работу рекурсивной функции (C++):

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

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

Пояснить работу цикла - C++
Привет всем Ребята помогите расскажите мне как работает этот Код точнее команда for в нете инфы много ну ни как не могу понять #include...

Нужно пояснить работу с потоками ofstream, ifstream, fstream - C++
Лектор не поставил коментариев, а я сейчас как дурак сижу разшифровую. Помогите, особенно на функции "void testofiles()" #include...

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

Схема рекурсивной функции - C++
Hi. Есть рекурсивная функция, для вычисления значения числа в n-ной степени. int power(int base, int exponent) { if(exponent...

3
Photofenix
59 / 59 / 11
Регистрация: 18.11.2016
Сообщений: 467
Завершенные тесты: 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
16848 / 11113 / 1745
Регистрация: 24.12.2010
Сообщений: 21,838
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 / 20
Регистрация: 24.10.2016
Сообщений: 186
16.02.2017, 22:00 #4
Понять работу рекурсии легко, если понять что некоторые подзадачи можно опять свести к исходной задаче.
Например, как здесь - имеем массив и его длину, нужно получить максимальный элемент в массиве. Окей, разобьем его пополам - теперь задача сводится к следующему - имеем 2 массива, нужно узнать максимальный элемент каждого массива (строки 5 и 6), далее из этих двух результатов нужно опять узнать максимум (строка 7). То есть, мы свели задачу практически к идентичной.
Теперь подумаем, когда это деление должно закончится - очевидно, когда размер массива равен единице - делить дальше то некуда. Поэтому просто возвращаем это единственное значение - оно ведь максимальное в массиве размером 1 элемент (строки 3 и 4).
1
16.02.2017, 22:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2017, 22:00
Привет! Вот еще темы с ответами:

Из рекурсивной функции в не рекурсивную - C++
Есть рекурсивная функция сортировки слиянием. Нужно переделать на функцию без рекурсий. void mergeSort(long* a, int begin, int end) ...

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

Программa с использованием рекурсивной функции - C++
Для приведённых ниже заданий составить два варианта программы с использованием рекурсии и без использования рекурсии и сравнить их. ...

Создание потоков в рекурсивной функции - C++
Почему при создании потоков в рекурсивных функциях скорость падает ? Добавлено через 1 минуту простейший пример: //...


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

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

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