我正在尝试打高尔夫球,我具有以下功能: 我想尝试一种单线纸: 但是我得到了这个lame-o编译器消息: 编译器无法合理地对该表达式进行类型检查
时间;尝试将表达式分成不同的子表达式 有更好的方法吗?谢谢 答案 0 :(得分:5) 您实际上不需要构造 输出: 如果您想进一步了解 答案 1 :(得分:0) 使用所有默认参数很难读取您的尝试。之一
尝试执行此操作的问题在于,闭包内部实际上并不需要传递到 这是使用两个 第二个 除了使用第二个 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]])}))
2 个答案:
Array
。您可以使用the sequence
function一次生成一个斐波那契: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
的理论基础,请阅读anamorphisms。Int
的{{1}},而您需要告诉Swift忽略它。使用默认参数很难做到这一点,但是如果您添加显式参数,则可以对要忽略的参数使用reduce
。_
语句的解决方案:reduce
print((1...n).reduce([0, 1]) { (f, _) in f + [f.suffix(2).reduce(0, +)] })
用于添加由reduce
获得的先前迭代的最后两个元素,然后使用.suffix(2)
将其附加到数组中。
+
,您还可以只添加最后两个值:reduce