读书人

此递归函数运行后提示陷入无穷递归不

发布时间: 2012-05-15 14:35:29 作者: rapoo

此递归函数运行后提示陷入无穷递归,不知道问题在何处,求指导。
public int fk(int i, List<int>s)
{
int min = 999;
if (s.Count <=0)
return Convert.ToInt32(d[0, i]);
else
{
List<int> newt = new List<int>();

for (int k = 0; k < s.Count; k++)
{
s.ForEach(z => newt.Add(z));
int backup = newt[k];
newt.RemoveAt(k);
int value = fk(backup, newt);
if (min > value + Convert.ToInt32(d[backup, i]))
min = value + Convert.ToInt32(d[backup,i]);

}
return min;
}
}

[解决办法]
public int fk(int i, List<int>s)
{
int min = 999;
if (s.Count <=0)
return Convert.ToInt32(d[0, i]);
else
{
List<int> newt = new List<int>();
s.ForEach(z => newt.Add(z));
for (int k = 0; k < s.Count; k++)
{
int backup = newt[k];
newt.RemoveAt(k);
int value = fk(backup, newt);
if (min > value + Convert.ToInt32(d[backup, i]))
min = value + Convert.ToInt32(d[backup,i]);

}
return min;
}
}
[解决办法]
我找出问题所在了,哈哈,刚才那个只保证跳出循环了,我知道你的意思假如原始为{1,2},先求{2},在求{2},最后得到值。

C# code
 public int fk(int i, List<int> s)        {                        int min = 999;            if (s.Count <= 0)            {                return Convert.ToInt32(d[0, i]);                       }            else            {                               for (int k = 0; k < s.Count; k++)                {                    List<int> newt = new List<int>();                    s.ForEach(z => newt.Add(z));                    int backup = newt[k];                    newt.RemoveAt(k);                                       int value = fk(backup, newt);                    if (min > value + Convert.ToInt32(d[backup, i]))                        min = value + Convert.ToInt32(d[backup, i]);                }                               return min;            }        } 

读书人网 >C#

热点推荐