回文检查与递归
本文关键字:递归 检查 回文 | 更新日期: 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));