The SICP book claims C doesn't have efficient recursion,
but it does actually: a void function doesn't reserve return space on the stack and can operate on pointers as intermediate return values - while tail calling N void functions cost the same as one such function.
See tailcall function:
https://github.com/FrozenVoid/C-techniques/blob/master/factorial-forms.c