我有一个奇怪的问题。我在玩Go时发现一些非常奇怪的行为,我无法弄清楚。
当我运行findMatchingSum
函数时,它将搜索期望的总和,如果sum较大,则将最后一个索引递减1,如果较大,则将第一个索引递增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
}
答案 0 :(得分: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
}
如果不这样做,将执行第三个分支,但该函数不会退出-它将跳转到下一条指令,即“返回false”。