September 22, 2008
@ 01:06 PM

C# 2.0 ile birlikte gelen isimsiz metodları  (anonymous methods) hepimiz biliyoruz. Peki ya bu isimsiz metod kendi kendini - recursive - nasıl çağıracak ? Malum adı üstünde metodun ismi yok.
Aşağıda isimsiz bir metodun - klasik faktöryel hesaplayan -  kendi kendini nasıl çağırdığına dair kodu inceleyebilirsiniz.

delegate T Func<T>( T a );

static void Main( string[] args )
{

    Func<int> f = delegate( int a )
    {

        MethodBase m = new StackTrace().GetFrame(0).GetMethod();
        return a > 1 ? a * (int)m.Invoke(null, new object[] { a - 1 }) : a;

    };
    Console.WriteLine(f(4));
}

Sevgili DnaPromat sınıfı öğrencileri ile yaptığımız diğer güzel bir yaklaşım.

Hedele d = null;
d = delegate(int x)
{
   
Console.WriteLine(x);
   
if (x == 0 || x == 1)
       
return 1;

    return x * d(x - 1);
};
Console.WriteLine(d(5));