Всякий раз, когда вы хотите узнать, что делает рекурсивная функция, вставьте пару распечаток.
void search_extremes_rec(const int t[], int n, int *min, int *max){
printf("Entering search_extremes_rec. n:%d\n", n);
if(n<=1){
printf("Base case. Exiting\n");
*min = t[0];
*max = t[0];
}else{
printf("Calling recursively...\n");
search_extremes_rec(t, n-1, min, max);
printf("Recursive call done. n:%d min:%d max:%d\n", n, *min, *max);
if(*min > t[n-1]){
*min = t[n-1];
}
else if(*max < t[n-1]){
*max = t[n-1];
}
}
}
Вывод:
$ ./a.out
Entering search_extremes_rec. n:5
Calling recursively...
Entering search_extremes_rec. n:4
Calling recursively...
Entering search_extremes_rec. n:3
Calling recursively...
Entering search_extremes_rec. n:2
Calling recursively...
Entering search_extremes_rec. n:1
Base case. Exiting
Recursive call done. n:2 min:7 max:7
Recursive call done. n:3 min:7 max:9
Recursive call done. n:4 min:6 max:9
Recursive call done. n:5 min:4 max:9
min: 2, max: 9
Как видите, она действительно продолжаетсяпока n = 1.