Форум myROBOT.ru » Лаборатория » Алгоритмы » Рекурсия

Страниц (1): [1]
 

1. mir - 02 Мая, 2020 - 09:09:21 - перейти к сообщению
Здравствуйте. Хочу научиться рекурсии.
2. VCOM - 12 Мая, 2023 - 10:01:52 - перейти к сообщению
Все проще некуда.

Задача. Задан массив чисел A. Разработать рекурсивную функцию, которая находит сумму элементов массива:

S = A[0] + A[1] + … + A[n],

где n – количество элементов массива. Программный код функции следующий:

// сумма элементов массива
int Sum(int i, int A[], int n)
{
if (i==n-1)
return A[i];
else
return A[i]+Sum(i+1,A,n);
}
Как видно из примера, в рекурсивную функцию Sum() передается 3 параметра:

текущее значение итератора i;
массив A;
количество элементов массива n.
Выход из функции осуществляется, если будет обработан последний элемент массива. Условие прекращения рекурсивного процесса имеет вид:

if (i==n-1)
return A[i];
Для суммирования текущего значения A[i] со следующими указывается строка:

return A[i]+Sum(i+1,A,n);
где рекурсивный вызов Sum(i+1, A, n) означает следующее значение массива A. Параметр i+1 указывает, что на следующем уровне вызова рекурсивной функции будет взят следующий после данного элемент массива.

Использование функции Sum() в другом программном коде может быть, например, таким:

int A[] = { 5, 7, 2, -1 };
int n = 4;
int sum;
sum = Sum(0,A,n); // sum = 13