gpt4 book ai didi

javascript - 加速 JavaScript 中的递归函数

转载 作者:行者123 更新时间:2023-11-28 07:18:23 25 4
gpt4 key购买 nike

有什么方法可以加快这个递归函数的执行速度并保持其递归性吗?

var printDecreased = function(z) {
console.log(z);

if (z > 0) {
printDecreased(z-1);
}
};

printDecreased(50);

由于这有一个递归调用,我认为没有很多方法可以加速它

最佳答案

您可以通过避免 if 语句来稍微提高速度,如下所示:

var printDecreased = function(z) {
console.log(z);

(z > 0 && printDecreased(z-1));
};

printDecreased(50);

但是增幅非常小(大约5-10%)

这是如何运作的?

这里的关键词是分支预测。我不会详细介绍分支预测,因为这不是问题所在。底线是,分支会消耗相当多的 CPU 时间,这意味着每个 if 都非常昂贵,如果您想提高频繁使用的线路的速度,请尽力忽略所有分支.

最简单的方法是用三元运算符替换每侧仅包含一个语句的 if/else 结构,以及仅包含一个语句的 if 结构。由 &&|| 运算符计算的总计。一般来说,它们比 ifif/else 快得多。这可以应用于几乎所有支持这些结构的编程语言。

示例

if (x==y) {
callA();
} else {
callB();
}

可以替换为

(x==y ? callA() : callB());

if (x==y) {
callA();
}

可以替换为

(x==y && callA());

(x!=y || callA());

这些选项为编译器提供了如何优化的更好线索,因此它可以优化分支预测。

其他可能的优化由于给定的限制,该示例很难比到目前为止更好地优化。由于这是一个非常简单的函数,因此函数调用开销占据了执行时间的很大一部分。如果您可以用循环替换递归(这在给定的示例中很容易完成),一般来说,您也可以大大加快该过程。删除递归可以加快大多数编程语言中的函数速度,因为调用函数通常会花费大量 CPU 时间。

关于javascript - 加速 JavaScript 中的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30574967/

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