<分区>
我的 Fibonacci 计算器似乎堆栈溢出非常快,总是在相同的数字
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]
}
}
一开始我尝试递归执行,但每次我尝试获取第 91 个值时都会收到 EXC_BAD_INSTRUCTION。然后我尝试用上面的方法来做,迭代而不是递归,每次我尝试访问第 93 个值时我都会得到一个 EXC_BAD_INSTRUCTION。如果我从一开始就用 10 个值而不是 2 个值填充缓存,那么在尝试获取第 93 个值时它仍然会失败。如果我拆分堆栈(在缓存计数 < n/2 时解析 n/2,然后继续)它仍然在 93 失败。我也只在模拟器上测试它。我是否遗漏了为什么失败的原因?