C# 递归回文检查

C# 递归回文检查,c#,recursion,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(

我正在学习递归,并试图进行回文检查。它不起作用。有人能帮我找出原因吗

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

如果
p.Length==0
,会发生什么情况

您的代码可能返回false或崩溃,而它应该返回true。或者,在调用CheckPalin之前和确认
p[0]==p[p.Length-1]
之后,当
p.Length==2时返回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));
致:

致:

头部呈方形(正如我关于
aa
--长度
0
字符串会给你带来麻烦的问题所暗示的那样)

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

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

太神奇了,我浏览了两遍都没注意到——直到你指出了误报。:)

头上的正方形(正如我关于
aa
--长度
0
字符串会给你带来麻烦的问题所暗示的那样)

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

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


太神奇了,我浏览了两遍都没注意到——直到你指出了误报。:)

哪些测试输入有效?哪些测试输入失败?如果将
aa
作为输入传递,会发生什么情况?添加一行以在每次通过循环时打印“p”,或手动设置断点并逐步通过每个循环否。我在努力学习。这就是我没有用谷歌搜索答案的原因。哪些测试输入有效?哪些测试输入失败?如果将
aa
作为输入传递,会发生什么情况?添加一行以在每次通过循环时打印“p”,或手动设置断点并逐步通过每个循环否。我在努力学习。这就是我没有用谷歌搜索答案的原因。谢谢你指出。我当然还不知道递归(错过了。谢谢你指出。我肯定还不知道递归。:(谢谢,我错过了一个终止条件和递归的概念。:(它肯定需要几次尝试才有意义。:)我对展开部分不是很确定。假设我有一个字符串“irbeyuibri”。当它检查“e”!=“i”时,它返回false。之后会发生什么?当我追踪代码时,它会继续用“beyuib”、“rbeyuibr”和“irbeyuibri”来点击CheckPalin调用。再后退一步,你会发现
false
会一直传播到原始调用:
bool palin=CheckPalin(“irbeyuibri”);
--
palin
也将是
false
。好的,看起来我明白了。非常感谢!啊,事实上,它不再调用,只是返回以前调用的值。谢谢,我错过了一个终止条件和递归的概念。(它肯定需要尝试几次才有意义。)我不太确定解绕部分。假设我有一个字符串“irbeyuibri”。当它检查“e”!=“I”时,它返回false。之后会发生什么?当我跟踪代码时,它会继续用“beyuib”、“rbeyuibr”和“irbeyuibri”来点击CheckPalin调用“。再后退一步,您会发现
false
会一直传播到原始调用:
bool-palin=CheckPalin(“irbeyuibri”)
--
palin
也将是
false
。好的,看起来我明白了。非常感谢!啊,事实上,它不再调用,只是返回以前调用的值。
return CheckPalin(p.SubsString(1, p.Length -2));