Andreas Grech Andreas Grech - 27 days ago 7
C# Question

C#: Recursive functions with Lambdas

The below does not compile:

Func<int, int> fac = n => (n <= 1) ? 1 : n * fac(n - 1);



Local variable 'fac' might not be
initialized before accessing


How can you make a recursive function with lambdas?

[Update]

Here are also two links that I found interesting to read:


  1. Eric Lippert's "Why does a recursive lambda cause a definite assignment error?"

  2. Anonymous Recursion in C#


Answer

This particular style of function is not supported by C# as a single line declaration. You have to separate out the declaration and definition into 2 lines

Func<int, int> fac = null;
fac = n => (n <= 1) ? 1 : n * fac(n - 1);
Comments