这是在 Go 中查找数字的阶乘的程序:
func factorial(x uint) uint {
if x == 0 {
return 1
}
return x * (factorial(x - 1))
}
在输入 5 上调用此函数时的输出为 120。但是,如果我添加一条else
语句,则会出现错误。
func factorial(x uint) uint {
if x == 0 {
return 1
} else {
return x * (factorial(x - 1))
}
}
错误 :function ends without a return statement
我return
在最后添加了一个:
func factorial(x uint) uint {
if x == 0 {
return 1
} else {
return x * (factorial(x - 1))
}
fmt.Println("this never executes")
return 1
}
我得到了 120 的预期输出。
为什么第二种情况会导致错误?为什么在第三种情况下,即使函数从未到达 last return 1
,它也会计算正确的输出?