bool palindrome(char input[], int siz, int start){
// siz = size of the array ,start =starting point of the array ie 0
if(input[start] == '\0') {
return true;
} else if(input[start] == input[siz - start - 1]) {
return true;
palindrome(input, siz, start + 1);
} else {
return false;
}
}我试图使用这个递归函数查找回文字符串,但是代码将术语alia作为回文输出,就好像它只检查字符串的第一个和最后一个字母一样。我采取的基本情况是,当在数组的开头找到空元素时,它返回true。否则,如果第一个元素和最后一个元素相等,则返回true,然后通过palindrome(input,siz,start+1)递归调用自己,否则返回false。
发布于 2017-03-21 04:04:03
您的问题是,在再次执行函数之前,您正在退出该函数。现在你已经
else if(input[start]==input[siz-start-1])
{
return true;
palindrome(input,siz,start+1);
}相反,试着
else if(input[start]==input[siz-start-1])
{
palindrome(input,siz,start+1);
}然后在函数的末尾添加
return true;编辑:
我测试了它,它对我很好,下面是完整的代码:
#include <iostream>
bool palindrome(char input[],int siz,int start){
//siz =size of the array ,start =starting point of the array ie 0
if(input[start]=='\0')
{
return true;
}
else if(input[start]==input[siz-start-1])
{
palindrome(input,siz,start+1);
}
else
{
return false;
}
return true;
}
int main()
{
char racecar[] = "racecar";
if (palindrome(racecar, 7, 0))
{
std::cout << "It's a palindrome!" << std::endl;
}
else
{
std::cout << "It's not a palindrome." << std::endl;
}
char abba[] = "abba";
if (palindrome(abba, 4, 0))
{
std::cout << "It's a palindrome!" << std::endl;
}
else
{
std::cout << "It's not a palindrome." << std::endl;
}
return 0;
}发布于 2017-03-21 05:24:59
这项工作应该是:
#include <iostream>
bool isPalindromeRecursive(char* string, int begin, int end)
{
if (begin == strlen(string) / 2) // There is no point in comparing chars past half of the string lenght
{
return true;
}
// Is the first char the same as the last char? <-- we call recursion based on that statement
return tolower(string[begin]) == tolower(string[end]) && isPalindromeRecursive(string, ++begin, --end);
}
bool isPalindrome(char* string)
{
return isPalindromeRecursive(string, 0, strlen(string)-1); // Let's ignore the null char (strlen(string)-1)
}
int main()
{
std::cout << isPalindrome("hooh") << std::endl;
}https://stackoverflow.com/questions/42917992
复制相似问题