Для начала определение рекурсивной функции неверно и, как правило, может привести к неопределенному поведению.
Первый параметр должен быть объявлен с квалификатором const, поскольку массив не изменяется в функции.
Второй параметр должен иметь тип size_t
.
Внутри функции рекурсивные вызовы могут вызываться два раза, если, например, первый оператор if выдает false.
if(array[n-1]>biggestNumber(array, n-1)){
^^^^^^^^^^^^^^^^^^^^^^^^^
return array[n-1];
}
else{
return biggestNumber(array, n-1);
^^^^^^^^^^^^^^^^^^^^^^^^^
}
Функция может быть объявлена и определена так, как показано в демонстрационной программе. ниже
#include <stdio.h>
size_t biggestNumber( const int a[], size_t n )
{
if ( n < 2 )
{
return 0;
}
else
{
size_t max_i = biggestNumber( a, n - 1 );
return a[max_i] < a[n-1] ? n - 1 : max_i;
}
}
int main(void)
{
int a[] = { 3, 4, 1 };
const size_t N = sizeof( a ) / sizeof( *a );
size_t i = biggestNumber( a, N );
printf( "The biggest number is %d\n", a[i] );
return 0;
}
Вывод программы:
The biggest number is 4
Принцип прост. Поскольку функция является рекурсивной, то для любого заданного n (количество элементов в массиве) функция находит индекс максимального элемента в массиве с первыми n -1 элементами. А затем сравните найденный максимум в подмассиве с элементом с индексом n-1.
Например, для первого рекурсивного вызова функция ищет индекс максимального элемента в подмассиве { 3, 4 }
.
Для этого подмассива функция вызывает себя для подмассива, состоящего из одного элемента {3}. Это значение является максимальным значением подмассива, поскольку массив солнца содержит только один элемент. Таким образом, индекс элемента, который равен 0, возвращается к предыдущему вызову функции.
Теперь функция сравнивает значения возвращаемого максимума, равного 3, с элементом с индексом (n - 1), т.е. с индексом 1, равным 4. Таким образом, функция возвращает индекс 1 первому вызов функции.
Здесь снова проводится сравнение максимума, равного 4, со значением элемента по индексу (n - 1), которое в этом вызове равно 2. В качестве значения 1 меньше значения 4, то возвращается индекс 1, индекс максимального значения.