Recursion is a special technique used in programming. Basically it's what @Disch said: a function that calls itself.
In every recursion the calling function calls itself. Of course to be a working program there should be a terminating condition. Here it's the second argument (int size).
As you can see when this happens to be 0 then the function instantly returns (line 16). The structure that is created is eventually calculate when the last non recursive function returns. Then every function that has been called starts to return and finally the first called function returns and program goes to line 9.
If you want you can run a variation of the problem to see the order of calling functions:
1 2 3 4 5 6 7 8 9 10 11
int whatIsThis( int b[], int size )
{
if ( size == 1 )
return b[ 0 ];
else
{
int i = whatIsThis( b, size - 1 );
cout << "size is" << size << " whatIsThis( b, size - 1 )=" << i;
return b[ size - 1 ] + i;
}
}
As you can see recursion requires a great amount of memory since all these functions need to be called (every function requires extra space since it's called inside another same function).