Personalmente me lo immagino così, al volo ora come mi viene pensato, non so neanche se va, scritto ora in 3 minuti.

codice:
public int TrovaMax(int indice, int max) {
  if (indice>array.lenght())
    return array[indice_el_piu_freq];
  else {
    tot=0;
    for (int i=0; i<array.lenght()) {
      if (array[indice]==array[i]) {
        tot++;
        indice_el_piu_freq==indice;
      }
    }
    if (tot>max) {
      TrovaMax(indice+1, tot);
    } else {
      TrovaMax(indice+1, max)
    }
  }
}
La chiamata ricorsiva è:
int elem_piu_freq = trovaMax(0, -1);

'indice_el_piu_freq' e 'tot' sono le uniche due variabili diciamo globali che vengono modificate, o sennò te le puoi portare dietro con la ricorsione senza farle globali, vedi te.