In strict <ahref="https://en.wikipedia.org/wiki/Functional programming"title="wp: functional programming"target="_blank">functional programming</a> and the <ahref="https://en.wikipedia.org/wiki/lambda calculus"title="wp: lambda calculus"target="_blank">lambda calculus</a>, functions (lambda expressions) don't have state and are only allowed to refer to arguments of enclosing functions. This rules out the usual definition of a recursive function wherein a function is associated with the state of a variable and this variable's state is used in the body of the function.
The <ahref="https://mvanier.livejournal.com/2897.html"target="_blank">Y combinator</a> is itself a stateless function that, when applied to another stateless function, returns a recursive version of the function. The Y combinator is the simplest of the class of such functions, called <ahref="https://en.wikipedia.org/wiki/Fixed-point combinator"title="wp: fixed-point combinator"target="_blank">fixed-point combinators</a>.
Define the stateless Y combinator function and use it to compute <ahref="https://en.wikipedia.org/wiki/Factorial"title="wp: factorial"target="_blank">factorial</a>. The <code>factorial(N)</code> function is already given to you.