繁体   English   中英

从递归返回时字典保持不变

[英]dictionary stays the same when returning from recursion

我有一段代码使用递归来计算所有数字的总和,直到最大。

static long gen(int limit, List<int> primes,int num,int idx,myDict dict,long sum)
    {

        for (int i = idx; i < primes.Count; i++)
        {
            if (num * primes[i] > limit || num * primes[i] < 0)
            {
                return 0;
            }
            dict.update(primes[i]);
            Console.WriteLine("{0}-->{1}", num * primes[i], dict.maxv);
            gen(limit, primes, num * primes[i], i, dict, sum + dict.maxv);
        }
        return sum;
    }

myDict基本上是一个字典,用于保存其最大值和该值的键。

我的问题是,从递归返回时dict不会改变。 我的意思是,例如,如果我调试该函数并且在调用堆栈中有对该函数的一些调用,那么我将尝试检查那里的变量的值。 num保留调用时应根据的值,但是dict始终保留“最新”值。

让我们举个例子,在调用堆栈中, num的值当前为8而dict当前包含值: 2:(3,4)我们应该拥有的dict是这个。 但是,如果我检查调用堆栈中的先前调用,我会发现dict中的所有dict都具有相同的值,而不是该函数可以从那里获得的值。

我认为也许有些概念上的想法我没有正确理解。

如果myDict本质上是Dictionary ,则始终通过引用gen方法来传递它。 这意味着只有myDict一个实例,并且在递归方法的每次迭代中, dict引用该实例。 只需从gen返回,就会从堆栈中弹出对myDict的引用,但这不会更改其内容。 如果要将dict返回其先前状态,则必须自己实施回溯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM