ma è ovviamente molto generica e per nulla efficiente.


No, è proprio sbagliata.

Non puoi chiamare ricorsivamente la funzione/metodo in questo modo credendo che non succeda nulla.

Devi includere il controllo in un ciclo che viene ripetuto se hai un errore.