Speaking about tail-call optimization, I wanted to precise something:
unsigned int factorial(unsigned int n) { if (n == 0) { return 1; } return n * factorial(n - 1); }
The last instruction in this function is a multiplication, whereas in:
unsigned int factorial(unsigned int n) { return do_factorial(1, n); } unsigned int do_factorial(unsigned int result, unsigned int n) { if (n == 0) { return result; } return do_factorial(result * n, n - 1); }
The do_factorial last instruction is clearly a call to itself, thus the tail-call optimization is way more probably to happen.
do_factorial
Thanks for your input!
In this article I never provided an example for tail call optimization, but I'll be sure to either edit it into this one or make sure to incorporate samples for everything I talk about in future articles.
It may also be interesting to point out that in this example, the factorial is basically a reduction on a generator of numbers
Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink.
Hide child comments as well
Confirm
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Speaking about tail-call optimization, I wanted to precise something:
The last instruction in this function is a multiplication, whereas in:
The
do_factorial
last instruction is clearly a call to itself, thus the tail-call optimization is way more probably to happen.Thanks for your input!
In this article I never provided an example for tail call optimization, but I'll be sure to either edit it into this one or make sure to incorporate samples for everything I talk about in future articles.
It may also be interesting to point out that in this example, the factorial is basically a reduction on a generator of numbers