2013-10-11 24 views
0

有沒有在C#中類似的方式來做到以下幾點:像C#中的memoization Python?

class Memoize: 
    def __init__(self, f): 
     self.f = f 
     self.memo = {} 
    def __call__(self, *args): 
     if not args in self.memo: 
      self.memo[args] = self.f(*args) 
     return self.memo[args] 

@Memoize 
def fib(n): 
    if n < 2: 
     return n 
    else: 
     return fib(n-1) + fib(n-2) 
+1

如果你能解釋一下你在這個代碼在做什麼,這將是非python用戶很容易回答你的問題 – Rohit

+0

@Kyle我在python中使用裝飾器緩存函數調用的結果。 –

回答

0

你可以用手動做一個Dictionnary<int, int>

public static int Fibonacci(int x) 
{ 
    var t = new Dictionary<int, int>(); 
    Func<int, int> fibCached = null; 
    fibCached = n => 
    { 
     if (t.ContainsKey(n)) return t[n]; 
     if (n <= 2) return 1; 
     var result = fibCached(n – 2) + fibCached(n – 1); 
     t.Add(n, result); 
     return result; 
    }; 
    return fibCached(x); 
} 
+0

'=>'是做什麼的? –

+0

[Lambda Expressions](http://msdn.microsoft.com/zh-cn/library/vstudio/bb397687.aspx) –