使用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!