Vol*_*ort 2 vb.net stack-overflow
基本上,我的程序将尝试生成所有可能的小写5个字母单词的列表.包括明显不是真正的单词的所有组合,如jshcc或mmdzq.
我通过堆积大量的函数调用来做到这一点,这个单词有效.
但那太多了,我得到了堆栈溢出错误.
有人会如何控制?
基本上,从递归转换为迭代.通常,这涉及创建一个Stack<T>"逻辑"堆栈或类似的东西.
但是,我原本期望一种方法生成一个包含所有可能的5个字母单词的列表,只有一个大约5个深的堆栈 - 每个字母一个.每个堆栈级别将负责一个级别的字母 - 因此堆栈的"顶部"将遍历每个可能的最后一个字母; 下一个堆栈帧将遍历每个可能的第四个字母,递归调用该方法迭代所有可能的最后一个字母等.像这样(C#代码,但希望你能理解它并将其应用于VB):
const string Letters = "abcdefghijklmnopqrstuvwxyz";
public static List<string> GenerateValidWords(int length)
{
List<string> words = new List<string>();
GenerateValidWords(0, new char[length], words);
return words;
}
private static void GenerateValidWords(int depth, char[] current,
List<string> words)
{
foreach (char letter in letters)
{
current[depth] = letter;
if (depth == current.Length - 1)
{
string word = new string(current);
if (IsValid(word))
{
words.Add(word);
}
}
else
{
GenerateValidWords(depth + 1, current, words);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你没有任何类型的过滤,那将产生11,881,376个单词 - 每个24字节(在x86上)大约285MB - 加上列表的所有空间等.这不应该杀死一个适当的大机器,但它是相当多的记忆.你确定你需要所有这些吗?
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |