LINQ でフィボナッチ (危険)

動いちゃったのでさらします。真似しちゃダメっぽいです。Max を大きくすると大変なことになります。
どう動いているのだろ(^^; 頭がついていきません…w

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    private const int Max = 20;

    static void Main()
    {
        int[] fibo = new int[ Max ];
        fibo[ 0 ] = 1;
        fibo[ 1 ] = 1;
        for ( int i = 1; i < Max - 1; i++ )
            fibo[ i + 1 ] = fibo[ i - 1 ] + fibo[ i ];

        foreach ( int i in fibo )
            Console.Write( "{0,8}", i );
        Console.WriteLine();
        Console.WriteLine();

        // LINQ
        IEnumerable<int> fibLinq = null;
        fibLinq = new int[] { 1, 1 }.
          Concat(
            Enumerable.Range( 1, Max - 2 ).
              Select( n => fibLinq.ElementAt( n - 1 ) + fibLinq.ElementAt( n ) ) );

        foreach ( int i in fibLinq )
            Console.Write( "{0,8}", i );

        Console.WriteLine( fibo.SequenceEqual( fibLinq ) );
        Console.ReadKey();
    }
}

まさかコンパイル通ったり、ましてや動いてしまうとは思いませんでした。