Można się pokusić o zrobienie w pełni funkcyjnej wersji (czyli bez zmiennych, same stałe) z rekurencją ogonową (a więc trywialnie zamienialną na pętlę przez kompilator).
int * maximum(int const * t, int const n) {
return (t && n > 0) ? maximumRecursive(t, n, t) : nullptr;
}
int * maximumRecursive(int const * t, int const n, int const * max) {
return n == 0 ? max : maximumRecursive(t + 1, n - 1, (*t > *max ? t : max));
}
Consty można powyrzucać. Wada jest oczywista: podejście wymaga dodatkowej funkcji (tutaj: maximumRecursive).
Kod nietestowany :]
Edit:
W sumie twoja funkcja ma podobne własności: to też rekurencja ogonowa. Zaraz się jej przyjrzę.