当你拨打IntProgression.sum()时,引擎盖下会发生什么?

示例代码:

val n: Int
val sum = (0..n).sum()
  1. Kotlin是否迭代了从0到n的所有元素?

    // O(n)
    var sum = 0
    for (i in 0..n) {
        sum += i
    }
    
  2. 还是用一个公式来计算等差数列的和呢?我认为它对于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

Kotlin相关问答推荐

Kotlin协程挂起继续线程

何时使用figureEach

如何确保Kotlin子类已完成初始化?

如何在Docker中使用Selenium和chromedriver?

在协程上下文中重新抛出异常

Kotlin 如何使用其 get 函数在内部检索映射值

Lets plot Kotlin中的多轴比例

每个 Kotlin 版本的默认 Kotlin 语言版本是什么?

这是什么 Kotlin 类型:(String..String?)

Saripaar formvalidation 在 kotlin 中第二次不起作用

找不到引用的类 kotlin.internal.annotations.AvoidUninitializedObjectCopyingCheck

参考 Kotlin 中的 Java 接口静态字段

Kotlin 有 array.indexOf 但我无法弄清楚如何做 array.indexOfBy { lambda }

无法为 retrofit2.Call 调用无参数构造函数

Jetpack Compose – LazyColumn 不重组

Kotlin not nullable值可以为null吗?

在Kotlin中使用@Service时引发异常

这是 Kotlin 中的错误还是我遗漏了什么?

可以在函数参数中使用解构吗?

java.lang.NoClassDefFoundError:解析失败:Lkotlin/time/MonoClock