2013-10-11 4 views
0

Есть ли подобный способ в C# сделать следующее:Python как memoization в C#?

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

[Лямбда-выражения] (http://msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx) –

Смежные вопросы