我正在尝试一些代码高尔夫,我有这个功能:
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] 删除。
我来说两句