I'm not sure what's confusing you here, perhaps you just need to unpack the code a bit. If you want to know what it's trying to achieve you find that out by reading the documentation or asking the author, the code can only tell you want it does to its parameters not why anyone would want to do that.
The C++ version below should be easy enough to understand.
bool f4( int* array, int size, int k )
{
if( size > 0 && k != 0 )
{
if( f4( array + 1, size - 1, k - a[ 0 ] ) )
{
return true;
}
else
{
return f4( array + 1, size - 1, k );
}
}
return ( k ? false : true );
}
What all this is to achieve I do not know but if you really badly want to find out you can do it yourself on paper by following the steps or just single step your debugger while watching the stack.