需要你的帮助才能找到回文。
我的回文中的问题是:当我放一句话时,测试不能很好地执行,因为我的程序只检查第一个字母和最后一个字母所以这会导致问题 句子的第一个字母值得最后一个字母,但第二个字母不值得上一封信之前的那个。
如果你可以帮我解决这个问题,我很感激 感谢。
我的代码 -
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char recursive_palindrome(const char st[], int first, int last )
{
if(st[first] != st[last])
{
return(0);
}
if(last-first<=1)
{
return(1);
return(recursive_palindrome(st, first+1,last+1));
}
}
int main()
{
char st[255];
printf("enter a string: \n");
gets(st);
if ( recursive_palindrome(st,0,strlen(st)-1))
{
puts("yes\n");
}
else
{
puts("No");
}
}
答案 0 :(得分:2)
if(last-first<=1)
{
return(1);
return(recursive_palindrome(st, first+1,last+1));
}
应修改为
if(last-first<=1)
{
return(1);
}
return(recursive_palindrome(st, first+1,last-1));
请注意,如果recursive_palindrome()
,您的原始st[first] == st[last] && last-first > 1
未收到任何退货声明。编译器应该发出警告。
答案 1 :(得分:0)
该行
return(recursive_palindrome(st, first+1,last+1))
不应该在条件块
中if(last-first<=1) {
因为如果该分支不,你想要递归。此外,它应该是:
return(recursive_palindrome(st, first+1,last-1))
(首先向前移动,向后移动)。
答案 2 :(得分:0)
请你试试这段代码,我解决了以下问题:
1)if(first > last)
之前的if(st[first] != st[last])
,以便您节省额外的电话费
2)此修复:
if(st[first] != st[last])
{
return(0);
}
3)此调用添加了最后+ 1,这是错误的!
return(recursive_palindrome(st, first+1,last-1));
守则:
char recursive_palindrome(const char st[], int first, int last )
{
if(first > last)
{
return(1);
}
if(st[first] != st[last])
{
return(0);
}
return(recursive_palindrome(st, first+1,last-1));
}
int main()
{
char st[255];
printf("enter a string: \n");
gets(st);
if ( recursive_palindrome(st,0,strlen(st)-1))
{
puts("yes\n");
}
else
{
puts("No");
}
return 0;
}