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));