当前位置: 首页 > 知识库问答 >
问题:

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

司马越
2023-03-14
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; 
    }
}

我试图使用这个递归函数来找到回文字符串,但是代码输出术语<code>alia

共有2个答案

濮阳和泰
2023-03-14

这部灵魂作品:

#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;
}
公西志文
2023-03-14

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

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;
}
 类似资料:
  • 问题内容: 我正在尝试查找字符串中字母的首次出现。例如,苹果中的p应该返回1。这是我拥有的: 它似乎似乎没有返回正确的值。 问题答案: 您的尝试很好,但是还不够。这是基于您的正确实现: 您的尝试存在两个问题: 在这一部分中,您已经找到了角色,因此正确的做法是停止递归,但您仍在继续。 在最后一个return语句中,您需要在递归调用中加1(如果最终找到了该字符),作为累加总索引号的一种方式。

  • 我是Python的超级新手,并试图创建一个非常简单的函数,用于更大的地图着色程序。 该函数的思想是将一组变量归于不同的区域(string1),并将颜色分配给它们(r、g、b),然后通过递归地查看一组区域边界(string2)来测试这些区域是否接触到相同颜色的另一个区域,以找到匹配的变量颜色。 输入格式如下:("Ar, Bg, Cb","AB, CB, CA")将返回True,这意味着没有相同颜色的

  • 问题内容: 如何递归地查找字符串中最长的单词? 编辑 说完了,谢谢大家。这是修改后的代码。 问题答案: 首先,让我们假设句子字符串参数没有任何前导或尾随空格。您可以通过调用trim()来处理递归情况。 然后,我们需要定义两种情况,即基本情况和递归情况。 基本情况是找不到空格,即传入的句子只是一个单词。在这种情况下,只需返回句子即可。 在递归的情况下,我们将得到第一个单词,其余的则与您一样。在句子的

  • 问题内容: 这就是我所拥有的: 但我想搜索src的子文件夹。这样的事情会起作用: 但这显然是有限且笨拙的。 问题答案: Python 3.5+ 由于你使用的是新的python,因此应pathlib.Path.rglob在pathlib模块中使用。 如果你不想使用pathlib,只需使用,但不要忘记传递recursive关键字参数。 对于匹配文件以点(。)开头的情况;例如当前目录中的文件或基于Uni

  • 问题内容: 我想递归搜索带有文本文件子目录的目录,并用多行字符串的内容替换文件中每次出现的{$ replace}。如何用python实现? [编辑] 到目前为止,我所拥有的只是使用os.walk的递归代码,以获取需要更改的文件列表。 问题答案: 签出os.walk: 上面的解决方案有缺陷,例如实际上会打开它找到的每个文件,或者实际上将每个文件都读到内存中(如果您有1GB的文本文件,那就不好了),但

  • 本文向大家介绍C#程序使用递归查找数字的数字总和,包括了C#程序使用递归查找数字的数字总和的使用技巧和注意事项,需要的朋友参考一下 假设我们已经设置了可以找到数字总和的数字- 以下将通过输入数字并递归检查来找到数字总和- 示例 以下是我们的代码,用于在C#中使用递归来查找数字的总和。 输出结果