lets assume you know everything except the recursive functon....

void someFunction( const int b[], int size )
{
if ( size > 0 ) {
someFunction( &b[ 1 ], size - 1 );
printf( "%d ", b[ 0 ] );
}
}

ok lets look at this a little. First off the parameters for this function are a 1d array of constant ints, and an int size. The array is actually passed as a pointer to the first element of the array. Understand that and you will understand the code...

we will shorten it a little.
imagine we pass array[3],size 3

if size > 0 ..... yes so we do ....
somefunc( &array[1], size 2)

if size > 0 ...... yes so we do...
somefunc(&array[2] (this is the clever bit.... we already passed a smaller array and now smaller again. &array[2] because its &x[1] of the previous smaller array),size 1)

if size > 0...... yes so we do....
somefunc(&array[3] (as before smaller array still),size 0)

if size >0 ..... no so return
print first element of array (that is array[3])
return

print first element of array (that is array[2])
return

print first element of array (that is array[1])
return

print first element of array (that is array [0])
return

result printed array in reverse.

understanding recursion is hard like this. You would be better stepping through it line by line in a debugger and so you can see exactly what happens with your own eyes.