42. 序列生成器,生成斐波那契数列

kotlin 的协程是一个很有用的可避免阻塞的廉价的底层操作。
本文就使用一下 sequence yield,来体验一下。
Yields a value to the [Iterator] being built.
生成一个正在构建的迭代器的值。

public abstract suspend fun yield(value: T)

我们先写一个函数

val fabonacci = buildSequence{
    yield(1)        //把一个值建立在迭代器中
    var cur = 1
    var next = 1
    while (true){
        yield(next)     //把第二个值写入迭代器
        //计算下一个神奇数列数字
        val tmp = cur + next
        cur = next
        next = tmp
    }
}

在 main 中调用的时候,可以控制输出的条件,不然这个数列会一直写下去的。

fun main(args: Array) {
    for (i in fabonacci){
        if (i > 100) break
        println(i)
    }
}

如果当前的数列值已经大于 100 了,就停止输出,跳出循环。
我们输出的这些值是什么呢?就是 fabonacci 里的 "next" 。
运行结果是

1
1
2
3
5
8
13
21
34
55
89

你可能感兴趣的:(42. 序列生成器,生成斐波那契数列)