我有一個(gè)奇怪的問題。我在玩圍棋時(shí)發(fā)現(xiàn)了一些我無法理解的非常奇怪的行為。當(dāng)我運(yùn)行該findMatchingSum函數(shù)時(shí),它會(huì)搜索預(yù)期的總和,如果總和更大,我將最后一個(gè)索引減 1,如果更大,則將第一個(gè)索引增加一個(gè)。但是,當(dāng)我調(diào)試代碼時(shí),它首先遇到 if 語句并且應(yīng)該返回 true,但是它直接運(yùn)行并運(yùn)行最后一個(gè) else if 語句?;靵y從這里開始。在第 3 次迭代中,它命中了進(jìn)入該塊的 if 語句,但沒有退出該函數(shù)。這是代碼;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貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
你忘了從 else-if 分支“返回”。這應(yīng)該有效:
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
}
如果不這樣做,第三個(gè)分支將被執(zhí)行,但函數(shù)不會(huì)退出——它會(huì)跳轉(zhuǎn)到下一條指令,即“return false”。
- 1 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報(bào)
0/150
提交
取消