为什么我的回文功能不起作用?

Cal*_*vin 3 c recursion palindrome

由于某些原因,我的回文功能不起作用,我会喜欢它的一些帮助:

int Pal(char *s, int a, int b)
{
    if (a>= b)
        return 1;

    if (s[a] != s[b])
        return 0;

    return Pal(s, ++a , --b);
} 

int main()
{
    char *s = "civic";

    if (Pal(s , 1, strlen(s)))
        printf("YES\n");
    else
        printf("No\n");
}
Run Code Online (Sandbox Code Playgroud)

它继续打印否,我对为什么会发生这种情况一无所知.

dbu*_*ush 6

你是函数不正确的起点:

if (Pal(s , 1 ,strlen(s) ))
Run Code Online (Sandbox Code Playgroud)

C和C++中的数组的起始索引为0.所以你实际上是从第二个字符开始,到字符串末尾的空终止字节结束.

开头和结尾都使用1的值:

if (Pal(s, 0, strlen(s)-1 ))
Run Code Online (Sandbox Code Playgroud)