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个答案)
三年前关闭。
我的斐波那契计算器似乎堆栈溢出非常快,总是在同一个数字
我一开始尝试递归地执行它,但每次尝试获取第91个值时,都会得到EXC_BAD_指令。然后我尝试用上面的方法,迭代而不是递归,每次尝试访问第93个值时,我都会得到一个EXC_BAD_指令。如果我从一开始就用10个值而不是2填充缓存,那么在尝试获取第93个值时它仍然失败。如果我拆分堆栈(在缓存计数小于n/2时解析n/2,然后继续)它仍然在93失败。我也只是在模拟器上测试。我是不是遗漏了什么,为什么会失败?
(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