相关疑难解决方法(0)

结合memoization和尾递归

有可能以某种方式结合memoization和tail-recursion吗?我现在正在学习F#并理解这两个概念,但似乎无法将它们结合起来.

假设我有以下memoize功能(来自Real-World Functional Programming):

let memoize f = let cache = new Dictionary<_, _>()
                (fun x -> match cache.TryGetValue(x) with
                          | true, y -> y
                          | _       -> let v = f(x)
                                       cache.Add(x, v)
                                       v)
Run Code Online (Sandbox Code Playgroud)

以及以下factorial功能:

let rec factorial(x) = if (x = 0) then 1 else x * factorial(x - 1)
Run Code Online (Sandbox Code Playgroud)

记忆factorial并不太难,并且使尾递归也不是:

let rec memoizedFactorial =
  memoize (fun x -> if (x = 0) then 1 else x * memoizedFactorial(x - …
Run Code Online (Sandbox Code Playgroud)

f# functional-programming tail-recursion memoization

30
推荐指数
3
解决办法
3659
查看次数