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)
它继续打印否,我对为什么会发生这种情况一无所知.
你是函数不正确的起点:
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)