2枚のカードの間には?(Ruby)

前回のエントリの問題を教えられたサイトに、さらに次のような問題がありました。

1から7の数字を書いたカードが2枚ずつ計14枚ある。そしてこれを1列に並べ,2枚の1の間にはカードが1枚,2枚の2の間にはカードが2枚はさまれていて,同様に,3の間には3枚,4の間には4枚,5の間には5枚,6の間には6枚,7の間には7枚のカードがはさまれるように14枚のカードを並べて下さい。

http://www.ic-net.or.jp/home/takaken/pz/index2.html

 
これ、単純な問題なのだけれど、どうしてもわかりませんでした。で、答えを見てみたのですが、ちょっと感動しましたね。再帰を使ってこんなにシンプルに解けるのですか。元の回答は C言語で書かれていますが、Ruby に移植してみました。これは Ruby としてはめずらしく、C言語の方が単純ですね。

table = Array.new(14, 0)

card = lambda do |n|
  if n > 7
    p table
    exit
  else
    i, j = 0, n + 1
    while j < 14
      if table[i].zero? and table[j].zero?
        table[i] = table[j] = n
        card.call(n + 1)
        table[i] = table[j] = 0
      end
      i += 1
      j += 1
    end
  end
end

card.call(1)

教えられてみれば、じつによくできた解法ですね。
 
正解(のひとつ)はこれです。

[1, 7, 1, 2, 5, 6, 2, 3, 4, 7, 5, 3, 6, 4]

ちなみに異なる解は全部で 52 個あります。