使用递归检查Palindrome

时间:2011-10-26 00:59:26

标签: c++ recursion palindrome

我正在尝试实现一个函数,它将检查单词是否为回文以下是我尝试使用的代码。代码显然适用于一个字母的单词和不以相同字母开头和结尾的单词。它失败了。请帮忙

bool is_palindrome(int start, int end, const string & str)
{
    if (str[start] != str[end])
        return false;
    else if (start == end)
        return true;
    else
        return is_palindrome(start++, end--, str);

    return false;
}

这是函数调用的主要函数 http://csel.cs.colorado.edu/%7Eekwhite/CSCI2270Fall2011/recursion_lab/palindrome.cxx

5 个答案:

答案 0 :(得分:7)

start++递增[local]变量start,并计算值。您想要评估新值,并且根本不需要更改局部变量。

所以改为编写start+1, end-1,然后考虑你的字符串中包含偶数个字符的情况,因为那里有另一个问题。

答案 1 :(得分:2)

一些事情:

您是否需要使用前缀增量/减量运算符?

return is_palindrome(++start,--end, str);

此外,您需要让测试开始> =结束才能使用偶数个字符。

答案 2 :(得分:0)

应该是这样的:

bool is_palindrome(int start, int end, const string& str)
{
        if (str[start] != str[end])
          return false;
        else if ((start == end) || (start < end))
          return true;
        else
          return is_palindrome(++start, --end, str);

        return false;
}

答案 3 :(得分:0)

Try this, not sure isit 100% working but for me it works:

bool is_palindrome(int start, int end, const string& str)
{
    if (str[start] != str[end])
      return false;
    else if (str[start] == str[end])
      {
        if (start <= end)
        return is_palindrome(start+1, end-1, str);
        return true;
      }

}

答案 4 :(得分:-1)

递归调用是回文函数来检查字符串是否是回文。 bool is_palindrome(int start,int end,const string&amp; str) start和end变量用于控制回文的匹配过程。 在每次匹配之后,使用递归格式

给出下一次迭代