首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用递归查找回文字符串?

使用递归查找回文字符串?
EN

Stack Overflow用户
提问于 2017-03-21 03:38:03
回答 2查看 830关注 0票数 0
代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-21 04:04:03

您的问题是,在再次执行函数之前,您正在退出该函数。现在你已经

代码语言:javascript
复制
else if(input[start]==input[siz-start-1])
        {
            return true;
            palindrome(input,siz,start+1);
        }

相反,试着

代码语言:javascript
复制
else if(input[start]==input[siz-start-1])
        {
            palindrome(input,siz,start+1);
        }

然后在函数的末尾添加

代码语言:javascript
复制
return true;

编辑:

我测试了它,它对我很好,下面是完整的代码:

代码语言:javascript
复制
#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
EN

Stack Overflow用户

发布于 2017-03-21 05:24:59

这项工作应该是:

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42917992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档