我正在编写一个程序,该程序计算通过其概率加权的最长条纹,并使用递归来获取所有可能的情况。这是我正在做的编码挑战:https : //open.kattis.com/problems/winningstreak
我注意到,由于递归,对于较大的输入,我拥有的置换函数并不是最有效的。输入示例为3,它将为matchs数组添加以下内容:000、010、001、011、100,110,101,111
public static void Permutations(string text, int numberOfGames, List<String> matches)
{
if (numberOfGames > 0)
for (int j = 0; j < 2; j++)
Permutations(text + j.ToString(), numberOfGames - 1, matches);
else
{
matches.Add(text.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题在于较大的输入(示例500),因为这会导致程序崩溃并引发错误:垃圾收集器无法为主要堆段分配16384字节的内存。还有其他方法可以改善此递归,以便在较大的输入上更好地运行吗?
感谢大伙们!