gpt4 book ai didi

go - 树递归 - 如何避免 'missing return at end of function' ?

转载 作者:行者123 更新时间:2023-12-01 22:45:14 25 4
gpt4 key购买 nike

关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

1年前关闭。




Improve this question




对于insects combinatorics的实验题,下面是我使用树递归的解决方案:

func Paths(m int, n int) int {
length := m
width := n

var f func(int, int) int

f = func(h int, v int) int {
if h == width && v == length {
return 1
} else if h < width && v < length {
return f(h, v+1) + f(h+1, v)
} else if v < length {
return f(h, v+1)
} else if h < width {
return f(h+1, v)
} /*else { // this condition doesn't occur
return 0
}*/
} // Line 19

return f(1, 1)
}
else上述解决方案不需要 block (无效),但编译器给出 missing return error在 19 号线

如何避免 missing return error对于上面的代码?

最佳答案

Go 不知道 // this condition doesn't occur ,并且在分析您的代码时,它会发现如果没有 if 的条件语句满足,它缺少返回值。

“解决”此问题的一种方法是执行 panic("does not occur") 之类的操作。 .不过,我不喜欢这样,因为多年来我遇到了太多的日志条目说“不会发生”......

或者,您可以使用 Go 中可能更自然的方法:

if cond1 {
return v1
}
if cond2 {
return v2
}
//... other cases ...
return v3

或者甚至是一个 switch 语句:
switch {
case cond1:
return v1
case cond2:
return v2
//... other cases ...
default:
return v3
}

您使用的“else if”是不必要的,因为每种情况都会导致函数立即返回。检查 Effective Go 以了解此模式。它也在标准库中被广泛使用(即,避免不必要的 else's)。

另外,由于您说绝对不可能所有条件都是错误的,因此无需测试最后一个:这是“其他”情况。

关于go - 树递归 - 如何避免 'missing return at end of function' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62210061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com