以下が私が作ったプログラムのソースです。出題された20個の場合だけを求めても面白くないので、任意の範囲(今のだと2~50個)のパターン数をすべて求めるようにしました。
あともう1点、再帰呼出に使われる のパラメータのうち、box, の3つは常に同じものとなり変化することはありません。それなら、この3つはグローバル変数として外に出すべきです。再帰呼出で常に同じ値を渡しても、それは単なるスタックバッファの無駄遣いにしかならないと思います。
答えは正解でしたが、書籍プレゼントの抽選は落選とのことでした。