This topic was inspired from search keywords that hit my site. I'm wondering why the simulated nested recursive function has a problem in C#. It turns out that compilation problem for recursive lambda in C# is isolated on Microsoft C# compiler only, that wasn't the case for Mono C# compiler (or Mono does an extra mile of performing compiler magic). This works fine on Mono C# (doesn't work on Microsoft C#):
using System;
namespace Craft
{
class MainClass
{
public static void Main (string[] args)
{
Func<int, int> fib = n =>
{
if (n == 0 || n == 1)
return 1;
else
return fib(n - 1) + fib(n - 2);
};
for(int i = 0; i < 10; ++i)
Console.WriteLine ("Hello World! {0}", fib(i));
}
}
}
To make that work in Microsoft C#, "forward declare" the recursive lambda(e.g. Func<int, int> functionNameHere = null) before defining the lambda.
using System;
namespace Craft
{
class Program
{
public static void Main (string[] args)
{
// forward declarations evokes C college days :-)
Func<int, int> fib = null;
fib = n =>
{
if (n == 0 || n == 1)
return 1;
else
return fib(n - 1) + fib(n - 2);
};
for(int i = 0; i < 10; ++i)
Console.WriteLine ("Hello World! {0}", fib(i));
}
}
}

Hi Mike!
ReplyDeleteIba ka pa rin talaga pagdating sa codes.
Anyway, please contact me ASAP at rmoldez2k@yahoo.com (ym or email). I have programming project to show you kung kaya...
Moldsz