我正在学习递归,正在尝试进行回文检查。它不起作用。有人可以帮我弄清楚原因。
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;
}
答案 0 :(得分:3)
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));