我有一個奇怪的問題。我在玩圍棋時發現了一些我無法理解的非常奇怪的行為。當我運行該findMatchingSum函數時,它會搜索預期的總和,如果總和更大,我將最后一個索引減 1,如果更大,則將第一個索引增加一個。但是,當我調試代碼時,它首先遇到 if 語句并且應該返回 true,但是它直接運行并運行最后一個 else if 語句?;靵y從這里開始。在第 3 次迭代中,它命中了進入該塊的 if 語句,但沒有退出該函數。這是代碼;package mainimport "fmt"var arr = []int{1,2,4,4}func main() { s := findMatchingSum(arr, 8, len(arr) - 1, 0) fmt.Println(s)}func findMatchingSum(arr []int, sum , last, first int ) bool { if arr[first] + arr[last] == sum { return true } else if arr[first] + arr[last] > sum { findMatchingSum(arr, sum, last - 1, first) } else if arr[first] + arr[last] < sum { findMatchingSum(arr, sum, last, first + 1) } return false}
1 回答

泛舟湖上清波郎朗
TA貢獻1818條經驗 獲得超3個贊
你忘了從 else-if 分支“返回”。這應該有效:
func findMatchingSum(arr []int, sum , last, first int ) bool {
if arr[first] + arr[last] == sum {
return true
} else if arr[first] + arr[last] > sum {
return findMatchingSum(arr, sum, last - 1, first)
} else if arr[first] + arr[last] < sum {
return findMatchingSum(arr, sum, last, first + 1)
}
return false
}
如果不這樣做,第三個分支將被執行,但函數不會退出——它會跳轉到下一條指令,即“return false”。
- 1 回答
- 0 關注
- 137 瀏覽
添加回答
舉報
0/150
提交
取消