Если вы посмотрите, как определяется факториал, вы найдете что-то вроде:
f(0) = 1
f(1) = 1
f(n) = f(n-1) * n
Таким образом, ваша функция действительно возвращает неправильное значение для factorial(0)
. Рекурсия в этой функции в основном работает путем уменьшения n
при каждом новом вызове функции factorial
.
Предположим, вы звоните factorial(3)
. n
будет, если с 3 ветвь else будет выполнена, так как n
не равен нулю. Мы следуем третьему правилу нашего определения вызова factorial(2)
(который является n-1) и умножаем результат этого на n. Ваша функция будет понижаться до тех пор, пока не будет вызван factorial(0)
, и вернет 0, который затем является фактором всех предыдущих вычислений, в результате чего получается 3*2*1*0
, что равно 0
.