Swift 中的斐波那契单行

Rik*_*Rik 3 reduce fibonacci swift

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

    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)
    }
Run Code Online (Sandbox Code Playgroud)

我想尝试一种单线,即:

print((1...n).reduce(([Int](),[0,1]), { ($0.0 + [$0.1[0]],[$1.1[1],$1.1[1]+$1.1[0]])}))
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个蹩脚的编译器消息:

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

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

rob*_*off 6

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

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

输出:

0
1
1
2
3
5
8
13
21
34
Run Code Online (Sandbox Code Playgroud)

如果您想了解更多关于 的理论基础sequence,请阅读关于变形的内容