我正在嘗試在 Swift 5 中實作一個斐波那契函式。當我在 Xcode Playground 上實作這個函式時(我從CSDojo 的 youtube 視頻中獲取了該函式的代碼),我遇到了這個錯誤訊息
錯誤:執行被中斷,原因:EXC_BAD_INSTRUCTION(代碼=EXC_I386_INVOP,子代碼=0x0)
最初,我認為錯誤一定來自超出范圍的下標索引。所以我再次檢查了我的代碼,似乎沒有問題。現在我想知道為什么我在嘗試運行時從 Xcode Playground 收到此錯誤訊息computeFiboBottomUp(n: 100)?它作業正常,直到computeFiboBottomUp(n:35).
是不是因為堆疊上的遞回呼叫太多了供編譯器處理?還是我的代碼可能包含錯誤?
func computeFiboBottomUp(n: Int) -> Int {
var bottom_up: [Int?] = []
if bottom_up.isEmpty {
for _ in 0...n {
bottom_up.append(nil)
}
}
if n == 1 || n == 2 { return 1 }
bottom_up[1] = 1
bottom_up[2] = 1
for i in 3...n {
bottom_up[i] = bottom_up[i-1]! bottom_up[i-2]!
}
return bottom_up[n]!
}
computeFiboBottomUp(n: 5)
computeFiboBottomUp(n: 35)
computeFiboBottomUp(n: 100) // error...
uj5u.com熱心網友回復:
您的代碼中沒有遞回。
請注意,Fib(35) 對于整數溢位來說太小了,但是對于 32 位和 64 位整數來說,Fib(100) 肯定太大了,因此您的編譯器會捕獲整數溢位錯誤。
您可以為 32 位有符號整數設定限制 n=41,為 64 位有符號整數設定 n=92。
更高的值需要使用長/任意精度整數演算法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/374280.html
