我是Swift(和非动态类型语言)的新手,并尝试创建一个函数,它创建了前100个Fibonacci数的数组。
就是这样:
func buildFibonacci(){
var numbers: [Int64] = [0,1]
for x in (2...99) {
numbers.append(numbers[x-1] + numbers[x-2])
}
print(numbers)
}
buildFibonacci()
但是当我运行它时,在第93次迭代中我得到一个错误:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
。据我了解,它是在总和操作上提出的。
我的猜测这是关于Int的大小,所以我把它改成了Int64,但看起来问题出在其他方面。我使用swift 4.1,如果它很重要的话。有人可以帮帮我吗?
答案 0 :(得分:1)
你的假设是对的,这是一个溢出异常,数字太高而无法用64位表示。在64位计算机上Int
无论如何都是Int64
,因此类型更改没有任何区别。
解决方案是使用NSDecimalNumber
,它不限于64位,并提供基本的算术方法。
func buildFibonacci(){
var numbers: [NSDecimalNumber] = [.zero, .one]
for x in 2...99 {
numbers.append(numbers[x-1].adding(numbers[x-2]))
}
print(numbers)
}
buildFibonacci()