我这个栈溢出该怎么改啊
程序是用来对一系列的图片碎片进行匹配的,由于数据量太大,导致栈溢出了
看到可以改写呈非递归形式,但是能力不足,而且没有接触过Tuple类,希望大家能帮忙解决下下
递归函数如下
/// <summary>
/// 递归函数
/// </summary>
/// <param name="bm">位图数组</param>
/// <param name="sort">排序数组</param>
/// <param name="start">左侧待匹配图片</param>
/// <param name="present">当前与右侧匹配的图片</param>
/// <param name="length">筛选出的长度</param>
/// <param name="minCount">最小偏差值</param>
/// <param name="minNum">最小偏差对应位图数组的下标</param>
/// <returns></returns>
private bool Fit(ref Bitmap[] bm,ref int[][] sort,int start,int present,int length,int minCount,int minNum)
{
if(present >= length || start == 18)//匹配到第19位时,退出递归
{
if (minCount >= 10)
{
return false;//如果最小偏差大于等于10,表明start不是最佳的
}
else
{
return true;
}
}
bool flag;//标志最小匹配是否为符合
int fitfulCount = Fitful(bm[start], bm[present]);//保存偏差数
if (fitfulCount < minCount)
{
flag = Fit(ref bm, ref sort, start, present + 1, length, fitfulCount, present);
}
else
{
flag = Fit(ref bm,ref sort, start, present + 1, length, minCount, minNum);
}
if (flag)
{
Swap(ref bm, ref sort, start + 1, minNum);
Fit(ref bm, ref sort, start + 1, start + 2, length, 999, start + 2);
}
else
{
if (start - 1 > 0)
{//如果前一个图片不是第一张,那么修改前一个图片
Fit(ref bm, ref sort, start - 2, start - 1, length, 999, sort[(start - 1) / 19][(start - 1) % 19]);//回溯到start前一个图片进行匹配
}
else
{//如果是第一个图片错误,返回false
return false;
}
}
return true;//最终结束递归
}