簡體   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