猿问

函数在返回语句时不退出

我有一个奇怪的问题。我在玩围棋时发现了一些我无法理解的非常奇怪的行为。


当我运行该findMatchingSum函数时,它会搜索预期的总和,如果总和更大,我将最后一个索引减 1,如果更大,则将第一个索引增加一个。


但是,当我调试代码时,它首先遇到 if 语句并且应该返回 true,但是它直接运行并运行最后一个 else if 语句。


混乱从这里开始。在第 3 次迭代中,它命中了进入该块的 if 语句,但没有退出该函数。


这是代码;


package main


import "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

}


跃然一笑
浏览 101回答 1
1回答

泛舟湖上清波郎朗

你忘了从 else-if 分支“返回”。这应该有效:func findMatchingSum(arr []int, sum , last, first int ) bool {&nbsp; &nbsp; if arr[first] + arr[last] == sum {&nbsp; &nbsp; &nbsp; &nbsp; return true&nbsp; &nbsp; } else if&nbsp; arr[first] + arr[last] > sum {&nbsp; &nbsp; &nbsp; &nbsp; return findMatchingSum(arr, sum, last - 1, first)&nbsp; &nbsp; } else if arr[first] + arr[last] < sum {&nbsp; &nbsp; &nbsp; &nbsp; return findMatchingSum(arr, sum, last, first + 1)&nbsp; &nbsp; }&nbsp; &nbsp; return false}如果不这样做,第三个分支将被执行,但函数不会退出——它会跳转到下一条指令,即“return false”。
随时随地看视频慕课网APP

相关分类

Go
我要回答