using System;
using System.Collections.Generic;
using static Memes;
var fib = Memoize<int, int>((n, fib) =>
n switch
{
<= 1 => 1,
var m => fib(n - 1) + fib(n - 2)
});
Console.WriteLine(fib(40));
public static class Memes
{
public static Func<TIn, TOut> Memoize<TIn, TOut>(Func<TIn, Func<TIn, TOut>, TOut> func)
{
var dic = new Dictionary<TIn, TOut>();
Func<TIn, TOut> rec = null;
rec = tin =>
{
if (dic.TryGetValue(tin, out var res))
return res;
res = func(tin, rec);
dic[tin] = res;
return res;
};
return rec;
}
}
With recursion. Example of code:
PoC
API