首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

小弟我这个栈溢出该如何改

2013-09-22 
我这个栈溢出该怎么改啊程序是用来对一系列的图片碎片进行匹配的,由于数据量太大,导致栈溢出了看到可以改

我这个栈溢出该怎么改啊
程序是用来对一系列的图片碎片进行匹配的,由于数据量太大,导致栈溢出了
看到可以改写呈非递归形式,但是能力不足,而且没有接触过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;//最终结束递归
        }



bm里面保存的是一组BitMap的图片,sort里面是bm图片对应的坐标,length是bm图片的个数

主函数调用语句:
好高深~不懂啊~
不复杂不高深啊。你试试。

热点排行