我有一个奇怪的问题。我在玩围棋时发现了一些我无法理解的非常奇怪的行为。当我运行该findMatchingSum函数时,它会搜索预期的总和,如果总和更大,我将最后一个索引减 1,如果更大,则将第一个索引增加一个。但是,当我调试代码时,它首先遇到 if 语句并且应该返回 true,但是它直接运行并运行最后一个 else if 语句。混乱从这里开始。在第 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 关注
- 99 浏览
添加回答
举报
0/150
提交
取消