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
输出为回文,就好像它只检查字符串的第一个和最后一个字母表一样。
我采用的基本情况是在数组的开头找到null元素然后返回true。
否则,如果第一个和最后一个元素相等,则返回true,并递归调用palindrome(input,siz,start+1)
,否则返回false。
答案 0 :(得分:1)
您的问题是您在再次执行之前退出该功能。 现在你有
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;
}
答案 1 :(得分:0)
这可以工作:
#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;
}