I suppose it's probably due to some deep-seated aversion to if
statements, but if it were up to me, I think I'd write the code something like this:
bool pal(char *str, size_t len) {
return len <2 || (str[0] == str[len-1] && pal(str+1, len-2));
}