Palindrome检查与递归

时间:2011-12-30 00:34:11

标签: c# recursion

我正在学习递归,正在尝试进行回文检查。它不起作用。有人可以帮我弄清楚原因。

private static bool CheckPalin(string p)
{
    if(p.Length == 1 || p.Length == 0)  //added check for even cases
        return true;
    if(p[0] != p[p.Length -1])
        return false;

    CheckPalin(p.SubsString(1, p.Length -2));
    return true;
}

3 个答案:

答案 0 :(得分:3)

头上的{p> Dan hit one failure方格(正如我关于aa - 长度0字符串的问题所暗示的那样会给你带来麻烦。)

另一个失败案例,如误报所示,一旦你快速退一步寻找它,实际上非常明显:

CheckPalin(p.SubsString(1, p.Length -2));
return true;

尝试:

return CheckPalin(p.SubsString(1, p.Length -2));

令人惊讶的是,我在没有注意到的情况下掠过它两次 - 直到你指出了误报。 :)

答案 1 :(得分:2)

p.Length == 0会怎样?

您的代码可能返回false或崩溃,而它应该返回true。或者,在p.Length == 2调用CheckPalin之前和确认p[0] == p[p.Length -1]之后返回true。

此外,您还不了解递归的工作原理。你的最后一行应该是

return CheckPalin(p.SubsString(1, p.Length -2));

答案 2 :(得分:0)

CheckPalin(p.SubsString(1, p.Length -2)); 
return true; 

为:

return CheckPalin(p.SubsString(1, p.Length -2));