我正在尝试编写一个函数来检查字符串是否是回文,并使用this example,我试图使用递归匿名函数来反转字符串:
static Boolean checkPalindromeAnonRec(string str)
{
str = str.ToLower().Replace(" ", String.Empty);
Func<string, string> revStr = null;
revStr = delegate(string s)
{
if (s.Length > 1)
{ return revStr(s) + s[0]; }
else
{ return s; }
};
return (str == revStr(str));
}
但是每次我运行它都会得到一个StackOverflowException
。对我来说,为什么,任何想法都不明显?
答案 0 :(得分:5)
这就是问题所在:
if (s.Length > 1)
{ return revStr(s) + s[0]; }
除了奇怪的支撑风格之外,它只是使用原始字符串递归 - 所以它将永远持续下去。我怀疑你打算在某处使用Substring
,以便使用较短的字符串...
我实际上会尝试将其编写为一个简单的非匿名(但仍然是递归)方法 - 所以请弄清楚如何递归写入:
static string Reverse(string input)
...如果您仍想将其内联到CheckPalindrome
方法中,则可以这样做。