【发布时间】:2015-03-23 17:12:28
【问题描述】:
我对这段代码有疑问。这不是工作或家庭作业。我只是想了解递归函数。代码一开始是可以运行的,但是当它发现一个超过 22000 个字符的单词时,它导致了一个错误的抛出 - 一个 stackoverflowexception。
这是代码
using System;
namespace Palindrome
{
using System.IO;
public class Program
{
public static void Main()
{
int c = 0;
string[] l = File.ReadAllLines("UKACD17.TXT");
for (int i = 0; i < l.Length; i++)
{
string ll = l[i];
if (T(ll))
{
Console.WriteLine(ll);
c++;
}
}
Console.WriteLine("Found {0} palindromes.", c);
Console.ReadLine();
}
private static bool T(string s)
{
if (string.IsNullOrWhiteSpace(s)) return false;
return s.Length == 1 || (s[0] == s[s.Length - 1] && T(s.Substring(1, s.Length - 2)));
}
}}
【问题讨论】:
-
栈的大小是有限的。
-
您可以简单地制定出更高效的递归和非递归解决方案,但我想这不是问题所在 - 效率。