我的斐波那契计算器似乎在相同数量的斐波纳契计算器堆栈溢出在斯威夫特
class FiboCalculator {
private static let instance = FiboCalculator()
private var cache: [Int] = [1,1]
private init(){}
// get the nth fibo number
class func getZeroIndexed(n: Int) -> Int {
if n < 0 {
return 0
}
else if n < instance.cache.count {
return instance.cache[n]
}
while n >= instance.cache.count {
print("going down, right now i have \(instance.cache.count) values cached")
instance.cache.append(instance.cache[instance.cache.count-1] + instance.cache[instance.cache.count-2])
}
return instance.cache[n]
}
}
我试图递归地做它的第一个堆栈溢出真神速,总是,但我当每次有一个EXC_BAD_INSTRUCTION我试图获得第91个值。然后,我尝试按照上述方式进行,迭代而不是递归,并且每次尝试访问第93个值时都会得到一个EXC_BAD_INSTRUCTION。如果我从开始而不是从2开始填充10个值,它在尝试获得第93个时仍然失败。如果我拆分堆栈(解决n/2而缓存计数< n/2,然后继续)它仍然失败在93.我也只在模拟器上测试。我错过了为什么这是失败的东西?
你也可以使用显然鲜为人知的内置'NSDecimalNumber', – vadian
@vadian NSDecimalNumber(在Swift 3中称为'Decimal')就像'float'或'double',它可以让你计算出到10^165(F_791),最不重要的数字将会丢失。 – kennytm
那是至少*那大* ;-)的fib(792) – vadian