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)
但是我收到了这个蹩脚的编译器消息:
编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式
有一个更好的方法吗?谢谢
您不需要实际构建一个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,请阅读关于变形的内容。
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |