当你拨打IntProgression.sum()
时,引擎盖下会发生什么?
示例代码:
val n: Int
val sum = (0..n).sum()
-
Kotlin是否迭代了从0到
n
的所有元素?// O(n) var sum = 0 for (i in 0..n) { sum += i }
-
还是用一个公式来计算等差数列的和呢?我认为它对于
n
的大值来说性能更好.// O(1) var sum = (0 + n) * (n + 1) / 2
当你拨打IntProgression.sum()
时,引擎盖下会发生什么?
示例代码:
val n: Int
val sum = (0..n).sum()
Kotlin是否迭代了从0到n
的所有元素?
// O(n)
var sum = 0
for (i in 0..n) {
sum += i
}
还是用一个公式来计算等差数列的和呢?我认为它对于n
的大值来说性能更好.
// O(1)
var sum = (0 + n) * (n + 1) / 2
不,Kotlin不会优化sum()
.
该函数是Iterable
(IntProgression
实现Iterable<Int>
)上的扩展函数.函数could根据实际类型实现不同的求和算法,但它只是循环迭代的所有元素:
var sum: Int = 0
for (element in this) {
sum += element
}
return sum