Ничего не возвращается неявно - когда n = 0, функция вводит оператор if и возвращает 1 непосредственно из оператора return 1
.
Однако это не та точка, в которой «ответ, который является факториалом», возвращается пользователю. Вместо этого он может возвращать это значение
вызывает функцию , вызываемую функцией fac (1), которая находится в середине ветви n * fac(n - 1)
. Таким образом, он примет возвращенное «1» и вернет n*1
, то есть от 1 до , это вызывающий абонент. Если это fac (2), он вернет n * 1
или 2 к , это вызывающий абонент и т. Д.
Таким образом, fac (5) переводится как:
fac(5) = 5 * fac(4) = 5 * (4 * fac(3) = 5 * (4* (3 * fac(2)) = 5 * (4* (3 * (2 * fac(1)) = 5 * (4* (3 * (2 * (1 * fac(0)) = 5*4*3*2*1*1
Только после того, как значение 1 возвращается через каждый верхний уровень, оно возвращается к первому вызывающему, и умножение на каждом этапе дает вам ответ.