Originariamente inviato da ste9213
dovrei mettere un return davanti ad ogni richiamo ricorsivo e poi dopo, definire il dato da copiare nell array come somma di quello che ritorno sia da destra che da sinistra ??
Alla fine di copiadati devi restituire un nuovo array, della "giusta" dimensione, che contiene l'insieme di dato più (se forniti) i valori dal left e dal right.

Originariamente inviato da ste9213
per il secondo metodo che mi hai detto ho capito se non sbaglio cosa dovrebbe fare ma non riesco ad implementarlo.
Il copiadati che hai postato resta quello public di "facciata". Ne avrai un altro private es. copiadatiInterno che riceve un ArrayList<Integer>. L'ArrayList è creato una sola volta dal copiadati e passato ad ogni invocazione (poi ricorsiva) di copiadatiInterno.
In tal modo non devi "restituire" nulla, accodi sempre nell'arraylist e non devi preoccuparti di altro, se non, alla fine di copiadati, di creare un int[] copiando tutti i dati (banale ciclo for).