美文网首页禅与计算机程序设计艺术Kotlin专题程序员
42. 序列生成器,生成斐波那契数列

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

作者: 厚土火焱 | 来源:发表于2017-12-06 17:03 被阅读116次

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<String>) {
    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. 序列生成器,生成斐波那契数列

    本文链接:https://www.haomeiwen.com/subject/curlixtx.html