需要你帮忙找回文。
我的回文中的问题是:当我输入一个句子时,测试执行得不好,因为我的程序只检查第一个字母和最后一个字母所以这会导致问题句子的第一个字母对最后一个字母是值得的,但第二个字母对最后一个字母不值钱。
如果你能帮我解决这个问题,我将不胜感激谢谢。
我的代码 -
#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("yesn");
}
else
{
puts("No");
}
}
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));
请注意,如果st[first] == st[last] && last-first > 1
,您的原始recursive_palindrome()
不会达成任何退货声明。编译器应该对此发出警告。
行
return(recursive_palindrome(st, first+1,last+1))
不应在条件块中
if(last-first<=1) {
因为如果不采用该分支,您希望递归。 此外,它应该是:
return(recursive_palindrome(st, first+1,last-1))
(先向前移动,后退)。
你能试试这段代码吗,我解决了以下问题:
1)这if(first > last)
if(st[first] != st[last])
之前,因此您可以节省额外的通话。
2) 此修复:
if(st[first] != st[last])
{
return(0);
}
3)这个调用是添加last+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("yesn");
}
else
{
puts("No");
}
return 0;
}