为了账号安全,请及时绑定邮箱和手机立即绑定

函数在返回语句时不退出

函数在返回语句时不退出

Go
跃然一笑 2023-05-15 14:44:07
我有一个奇怪的问题。我在玩围棋时发现了一些我无法理解的非常奇怪的行为。当我运行该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”。


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信