Попробуйте, не уверен, что это 100% работает, но у меня это работает:
bool is_palindrome(int start, int end, const string& str)
{
if (str[start] != str[end])
return false;
else if (str[start] == str[end])
{
if (start <= end)
return is_palindrome(start+1, end-1, str);
return true;
}
}