函数在命中return语句时不会退出

  • 本文关键字:退出 语句 return 函数 go
  • 更新时间 :
  • 英文 :


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

当我运行findMatchingSum函数时,它搜索期望的和。如果和较大,我将最后一个索引递减1,如果较大,则将第一个索引递增1。

然而,当我调试代码时,它会首先命中if语句,并且应该返回true,但它会直接转到并运行最后一个else-if语句。

混乱从这里开始。在第三次迭代中,它命中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
}

您忘记了从else-if分支"return"。这应该有效:

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

最新更新