我的斐波那契計算器似乎在相同數量的斐波納契計算器堆棧溢出在斯威夫特
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