This is because you are unrollingrecursing.
n, , n n+1, factorial(n-1)...
,
r = n * factorial (n-1);
factorial.
( factorial n, 1), factorial, n<=1.
1, factorial, n 2, (n * whatever was returned by factorial) B r.
, , B ...
factorial(5)
factorial(4)
factorial(3)
factorial(2)
factorial(1)
return 1
return r
return r
return r
return r