In addition to the above, perhaps the following reworking helps better understand the issue. I believe 'enum' works the same in C as C++.
#include <stdio.h>
enum Branch { InitialEntry, LeftBranch, RightBranch };
int f3(int *a, int n, int m, Branch b);
int main()
{
int arr[6] = {3, 12, 6, 11, 2, 10};
char *txt[] = {"NO","YES","MAYBE","PROBABLY"};
printf("%s\n",txt[f3(arr,6,5, InitialEntry)]);
return 0;
}
int f3(int *a, int n, int m, Branch b)
{
if(b==InitialEntry) printf("%s %d %d\n", "Entry ",n, m);
else if(b==LeftBranch) printf("%s %d %d\n", "Left ",n, m);
else printf("%s %d %d\n", "Right ",n, m);
if(m==0) return 1;
if(n<2) return 0;
return f3(a+1,n-1,m-a[0], LeftBranch) || f3(a+1,n-1,m, RightBranch);
}