回文检查与递归

本文关键字:递归 检查 回文 | 更新日期: 2023-09-27 18:19:07

我正在学习递归,并正在尝试回文检查。它不起作用。有人可以帮我找出原因吗?

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;
}

回文检查与递归

Dan 在头上击中了一个失败的方块(正如我关于aa的问题所暗示的那样——字符串0长度会给你带来麻烦(。

另一种失败情况,如误报所示,一旦您快速后退并查找它,实际上非常明显:

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

尝试:

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

太神奇了,我浏览了两次都没有注意到它 - 直到你指出误报。:)

如果p.Length == 0会怎样?

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

你也不明白递归是如何工作的。您的最后一行应该是

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

自:

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