斯威夫特的斐波那契一线

里克

我正在尝试一些代码高尔夫,我有这个功能:

    func fibonacci(n: Int) {

        var x1=0
        var x2=1
        var arr = [Int]()

        for _ in 1...n {
            arr.append(x1)
            let temp = x1+x2
            x1 = x2
            x2 = temp
        }
        print(arr)
    }

我想尝试一种单线:

print((1...n).reduce(([Int](),[0,1]), { ($0.0 + [$0.1[0]],[$1.1[1],$1.1[1]+$1.1[0]])}))

但是我得到了这个la脚的编译器消息:

编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式

有一个更好的方法吗?谢谢

抢马约夫

您无需实际构建Array您可以使用sequence函数一次生成一个斐波那契:

sequence(first: (0, 1)) { a, b in (b, a + b) }
    .prefix(10)
    .forEach { a, _ in print(a) }

输出:

0
1
1
2
3
5
8
13
21
34

如果您想进一步了解的理论基础sequence,请阅读有关变形的信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章