Sbagli un sacco di roba, perciò ti presenterò due esempi funzionanti che potrai studiarti.
codice:
#include <stdio.h>
#include <stdlib.h>
int *_reverse(int *a, int sz, int *na, int i) {
if(i == sz) return na;
na[sz-i-1] = a[i];
return _reverse(a, sz, na, i+1);
}
int *reverse(int *a, int size) {
int *na = (int *)malloc(sizeof(int)*size);
return _reverse(a, size, na, 0);
}
void _reverse1(int *a, int *na, int sz) {
if(sz == 0) return;
*na=*a;
return _reverse1(a-1, na+1, sz-1);
}
int *reverse1(int *a, int size) {
int *na = (int *)malloc(sizeof(int)*size);
_reverse1(a+size-1, na, size);
return na;
}
int main(void) {
int a[4] = {1,2,3,4};
int *b = reverse(a, 4);
int *c = reverse1(b, 4);
int i;
for(i = 0; i < 4; ++i)
printf("%d\t%d\n", b[i], c[i]);
free(b);
free(c);
return 0;
}
Da notare comunque che C e ricorsione non vanno proprio a braccetto e neanche ricorsione e array.