Вот программа для поиска факториала числа в 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.
Почему второй случай вызвал ошибку? Почему в третьем случае, даже если функция никогда не достигает последнего return 1
, он вычисляет правильный вывод?