gpt4 book ai didi

Javascript 阶乘函数内存

转载 作者:行者123 更新时间:2023-12-02 23:53:27 24 4
gpt4 key购买 nike

我正在尝试将阶乘函数与内存结合使用。我从对象中获取了最大值以减少递归调用的次数。但问题是第一次调用我不知道这是否经过优化,因为第一次调用非常昂贵。对此的任何见解都会很棒。

let cache = {0: 1};
function factMemoize(key) {
if (!cache[key]) {
let maxVal = Object.keys(cache).reduce(function (a, b) {
return Math.max(a, b);
});
console.log(maxVal);
while (key >= maxVal) {
cache[key] = key * factMemoize(key - 1);
maxVal++;
}
}
return cache[key];
}

最佳答案

记住这个值并不会带来什么好处,因为每个值只使用一次。调用该函数后,您确实拥有用于第二次调用的缓存,但我们通常认为内存是发生在仅在函数期间存在的缓存中的事情。对于类似的事情,计算斐波那契数是一个典型的例子,其中内存是对朴素递归函数的巨大改进。

话虽如此,在您的函数中,尚不清楚为什么使用对象作为缓存然后搜索它。您可以只使用一个数组,其中索引将是您要查找的计算数字。你不需要搜索它,只需从该号码开始,递归调用下一个较低的号码即可。如果有缓存,它就会返回。例如:

let cache = [1];
function factMemoize(key) {
if (!cache[key]) {
cache[key] = key * factMemoize(key - 1)
} else { // just to demo cache:
console.log("cache hit:", key)
}
return cache[key]
}

// only hits cache at the end
console.log("6! = ", factMemoize(6))

// second call benefits from cache:
console.log("8! = ", factMemoize(8))

关于Javascript 阶乘函数内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com