gpt4 book ai didi

javascript - 简单 for 循环与 >> 运算符之间的区别

转载 作者:搜寻专家 更新时间:2023-10-30 22:15:15 26 4
gpt4 key购买 nike

我在 vue.js 中找到了这段代码。但是,使用 snippet-1 编写模板 repeat 与使用 snippet-2 相比有什么优势。

片段 - 1 - Source

const repeat = (str, n) => {
let res = ''
while (n) {
if (n % 2 === 1) res += str
if (n > 1) str += str
n >>= 1
}
return res
}

片段 - 2

const repeat = (str, n) => {
let res = ''
while (n--) {
res += str;
}
return res
}

最佳答案

这是不同的迭代次数。

在第二个片段中,您有 n 次迭代。但在第一个片段中,您大致有 log n 次迭代。这意味着函数的复杂性从 O(n) 下降到 O(log n),这对于巨大的 n 可能很重要。

它是如何工作的?作为初学者,这里以一种过于简单的方式总结了逻辑:如果我们将迭代减半,我们可以将添加到结果中的内容加倍。

所以 >> 1 有点像 整数除以 2。整数除法意味着 5/2 结果是 2。但这意味着我们错过了迭代!?

在每个奇数上,我们在将其加倍到结果之前添加当前字符串,因此我们在继续之前将迭代的总和(当前 str)保存在我们的结果中。因此,我们知道我们的迭代是保存的,我们通过将每一步剩余的迭代减半来向下迭代,同时将我们很快添加到结果中的内容加倍。

通过这种重复,我们跳过了很多迭代,这是降低复杂性的关键。

对于 n = 5:

1 'str: ' 'kk' 'res: ' 'k'
2 'str: ' 'kkkk' 'res: ' 'k'
3 'str: ' 'kkkk' 'res: ' 'kkkkk'

对于 n = 10:

1 'str: ' 'kk' 'res: ' ''
2 'str: ' 'kkkk' 'res: ' 'kk'
3 'str: ' 'kkkkkkkk' 'res: ' 'kk'
4 'str: ' 'kkkkkkkk' 'res: ' 'kkkkkkkkkk'

对于 n = 11

1 'str: ' 'kk' 'res: ' 'k'
2 'str: ' 'kkkk' 'res: ' 'kkk'
3 'str: ' 'kkkkkkkk' 'res: ' 'kkk'
4 'str: ' 'kkkkkkkk' 'res: ' 'kkkkkkkkkkk'

关于javascript - 简单 for 循环与 >> 运算符之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57605505/

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