此问题已在此处有答案:
Runtime Error when Trying Bottom Up Approach to Implement Fibonacci function in Swift?(1个答案)
3天前关闭。
我正在学习使用swift在swift playground中编写应用程序,但我对以下问题感到非常困惑。我想简单地编写一个斐波那契程序来测试它的能力,但是它在随机迭代次数之后随机崩溃。(8、11、55等)代码如下:
var num1 = 0, num2 = 1
for i in 0..<100{
print(num1)
var temp = num2
num2 += num1
num1 = temp
}
2条答案
按热度按时间zzwlnbp81#
您的实现的问题是,它将继续打印序列中的数字,直到溢出用于表示数字的数据类型的界限。试试这个。
这是避免整数溢出的更好的解决方案。
wfypjpf42#
这是一个整数溢出问题,当下一个斐波那契数(
num2
)变得太大而不能表示为有符号的64位整数时。崩溃似乎是随机的,因为程序的输出是缓冲的,并且不是所有已打印的消息都是可见的。我尝试添加一个延迟来尝试删除缓冲并强制输出出现:在iPad上的Swift Playgrounds中,这可靠地显示了我的第91位:
由于
Int.Max
是9223372036854775807
,并且代码是打印num1
,这意味着num2
已经在i==90
迭代中被设置为7540113804746346429
。在代码可以为i==92
打印num1
之前,它需要将4660046610375530309
添加到num2
(在i==91
迭代中),这对于有符号的64位整数(12200160415121876738
)来说太大了。