>>503
めどかったので、globalまくり。

全部の組み合わせを回すためにこんな方法使ってる。

int counter[];
funcA(int p){
if(終了条件){return;} /* Case A */
for(counter[p] = 0〜n){/* Case B */
funcA(p+1);
}
}

例えば3種類だったら
1回目呼び出し - counter[0] = 0 /* Case A */
2回目呼び出し - counter[1] = 0 /* Case A */
3回目呼び出し - counter[2] = 0 /* Case A */
4回目呼び出し - 評価 /* Case B */
5回目呼び出し - counter[2] = 1 /* Case A */
6回目呼び出し - 評価 /* Case B */
7回目呼び出し - counter[2] = 2 /* Case A */
8回目呼び出し - 評価 /* Case B */

ってなる。(あーー もしかすると評価がもっと呼び出されている気がするけど知らんw)