This question already has answers here:
using for loop for fibonacci series to print values it will print up to 47 values above that it shows error [closed]
(1个答案)
Simple Swift Fibonacci program crashing (Project Euler 2)
(2个答案)
三年前关闭。
我的斐波那契计算器似乎堆栈溢出非常快,总是在同一个数字
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_指令。然后我尝试用上面的方法,迭代而不是递归,每次尝试访问第93个值时,我都会得到一个EXC_BAD_指令。如果我从一开始就用10个值而不是2填充缓存,那么在尝试获取第93个值时它仍然失败。如果我拆分堆栈(在缓存计数小于n/2时解析n/2,然后继续)它仍然在93失败。我也只是在模拟器上测试。我是不是遗漏了什么,为什么会失败?

最佳答案

第93个Fibonacci数是12200160415121876738,它大于263-1,因此无论如何不能表示为Int
如果你真的想支持这么大的数字,你应该使用BigInteger library

10-08 05:22