使用C中的递归函数测试回文结构

我尝试编写用于测试字符串的程序,如果它是一个回文或不是,但我总是得到输出,因为它不是一个。 我的代码出了什么问题?

#include  #include  int is_palindrome(int start, int end, char *str) { if (str[start] != str[end]) return 0; else if (start == end) return 1; else return is_palindrome(++start, --end, str); return 0; } int main() { char str[20]; int length,start=0,end=length-1; int result; printf("Enter the String.\n"); fgets( str, sizeof( str ), stdin ); length = strlen(str); if(is_palindrome(start,end,str)) printf("It's a palindrome!\n"); else printf("It's not a palindrome! \n"); return 0; } 

你有两个主要问题,

1)您正在使用length初始化end而不首先初始化length

 length = strlen(str); /* initialize end here */ 

2)你没有考虑从fgets到字符串末尾的换行符:

 end = length - 2; /* don't include the newline */ 

++start--end传递时会发生什么?

 else if (start == end) 

应该>=

在这个is_palindrome()函数中你必须检查它否则它将不适用于回文词的偶数字符

 if(start>end) return 1; 

if(start==end)有逻辑错误。

这是由最后一次递归调用引起的,其中last和end的值总是相同的,即它们都将位于数组的中心。 因此,函数is_palindrome()将始终返回1 ,输出将始终是It's a palindrome!