【发布时间】:2021-11-17 15:29:32
【问题描述】:
我创建了一个withMemo 函数,它返回所提供函数的记忆版本。
const memoizedFn = withMemo(fn)
我怎样才能记住这个适用于递归的斐波那契函数?
const fibo = (n) => {
if (n <= 1) return 1
return fibo(n - 2) + fibo(n - 1)
}
确实withMemo(fibo) 并没有提高性能,因为fibo 内部的递归调用仍然指向未记忆的版本...
所以我必须更改 fibo 的声明以使 momoization 工作:
const momoizableFibo = memoizer => {
const fibo = (n) => {
if (n <= 1) return 1
return memoizer(fibo)(n - 2) + memoizer(fibo)(n - 1)
}
return memoizer(fibo)
}
// momoizableFibo(withMemo)(50) // takes a ms
有没有办法记住fibo(或任何其他递归函数)而不像我那样改变它的声明?
【问题讨论】:
-
你检查过this吗?
标签: javascript algorithm recursion memoization