swift - 斐波那契计算器堆栈溢出 Swift 中的第 93 个数字

标签 swift

我的 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 失败。我也只在模拟器上测试它。我是否遗漏了为什么失败的原因?

最佳答案

第 93 个 Fibonacci 数是 12,200,160,415,121,876,738,它大于 263 − 1,所以它无论如何都不能表示为 Int

如果你真的想支持那么大的数字,你应该使用 BigInteger library .

关于swift - 斐波那契计算器堆栈溢出 Swift 中的第 93 个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40345093/

相关文章:

ios - 使用 swift 进行场景套件内存管理

ios - Swift - 可达性崩溃

string - Swift - 在字符串中的多个位置查找字符

ios - CloudKit:部署到AppStore后访问开发环境吗?

ios - 未在自定义 View 中调用 UIButton 操作

ios - 查找哪个单元格被单击并执行 Segue

ios - 更新 Firebase pod 后出现错误。 <下载网址> <存储引用>

swift - 如何通过按下 UIbutton 来检查它是否是正确答案

swift - 播放声音文件时启动时出现白屏 SKAction

swift - 快速 append 到来自不同类的数组