The C++ version below should be easy enough to understand.

C#

bool f4( int* array, int size, int k ) { if( size > 0 && k != 0 ) //if there is anything to process { if( f4( array + 1, size - 1, k - a[ 0 ] ) ) //if processing all the elements after the first one against a k of ( k - first element ) returns true then { return true; } else //otherwise { return f4( array + 1, size - 1, k ); //return the result of processing all the elements after the first one against k itself } } return ( k ? false : true ); //In the no-more-to process case return the inverse of k, true if k is 0, false otherwise }

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.