1

我正在尝试编写一个函数来检查字符串是否为回文,并使用此示例,我正在尝试使用递归匿名函数来反转字符串:

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. 这对我来说并不明显,为什么,有什么想法吗?

4

1 回答 1

5

好吧,这就是问题所在:

if (s.Length > 1) 
  { return revStr(s) + s[0]; } 

除了奇怪的支撑风格之外,这只是使用原始字符串递归- 所以它会永远持续下去。我怀疑你打算在Substring某个地方使用,以便它使用更短的字符串递归......

我实际上会尝试将它写成一个简单的非匿名(但仍然是递归的)方法开始 - 所以弄清楚你将如何递归编写:

static string Reverse(string input)

...然后,如果您仍想将其内联到您的CheckPalindrome方法中,则可以这样做。

于 2013-07-12T19:05:44.623 回答