Swift Playground中斐波那契程序随机崩溃问题求助
解决Swift Playground中斐波那契代码随机崩溃的问题
你的代码崩溃是因为整数溢出。Swift默认的Int类型是有符号整数,当斐波那契数列的数值超过当前设备Int类型的最大值时,执行num2 += num1就会触发运行时错误,导致崩溃。不同设备的Int位数不同(比如32位设备Int最大值为2^31-1,64位设备为2^63-1),所以崩溃的迭代次数看起来随机。
这里有两种可行的解决方案:
使用Swift的溢出操作符:将
num2 += num1替换为num2 &+= num1。&+是溢出加法操作符,当数值超出类型范围时会自动循环折返,不会触发崩溃。
修改后的代码:var num1 = 0, num2 = 1 for i in 0..<100{ print(num1) var temp = num2 num2 &+= num1 num1 = temp }使用更大范围的整数类型:比如
UInt64或Int64,这些类型能容纳远大于普通Int的数值,大幅延迟溢出的发生(甚至在100次迭代内不会溢出)。
修改后的代码示例:var num1: UInt64 = 0, num2: UInt64 = 1 for i in 0..<100{ print(num1) let temp = num2 num2 += num1 num1 = temp }
内容的提问来源于stack exchange,提问作者Bananenkris
相关产品推荐
相关产品推荐

