Mmm, questo tipo di problema a mio avviso non va risolto con la ricorsione, ma con un semplice confronto di stringhe: nella tua definizione, la stringa è tandem se la sua prima metà è uguale alla sua seconda metà.
Quindi, basterà verificare se la stringa è lunga un numero pari di caratteri, e in questo caso se la substringa della prima metà è identica alla substringa della seconda metà.
Inoltre, io non userei una lettera accentata nel nome di una funzione, mai... rischi errori di compilazione.
Detto questo, la tua funzione è comunque erronea e ridondante:
1) la chiamata ricorsiva return èTandem(stringa) sembra aggiunta alla fine del codice senza che abbia senso, e non è nemmeno condizionata a nulla: prova ad immaginare che cosa succederebbe se io chiamassi la tua funzione con stringa "aabb": la funzione andrebbe in un loop infinito.
2) fai un ciclo per confrontare due diverse stringhe carattere per carattere quando potresti confrontarle e basta!
3) crei una classe e un membro della classe (parola) che poi non usi mai!
codice:
public boolean isTandem(String stringa) {
if(stringa.length() % 2 != 0)
return false;
else
return (stringa.substring(0, stringa.length()/2)==stringa.substring(stringa.length()/2));
}
}
Volendo la funzione potrebbe essere resa ricorsiva, anche se non ne vedo l'utilità, facendo i modo che controlli solo la corrispondenza delle due lettere corrispondenti:
codice:
public boolean isTandem(String stringa) {
if(stringa.length() % 2 != 0)
return false;
else
return (stringa.substring(0, 1)==stringa.substring(stringa.length()/2,1) && isTandem(stringa.substring(1,stringa.length()/2-1)+ stringa.substring(stringa.length()/2+1)));
}
}
Ma mi sembra assolutamente ridondante!