это понятно, но нам нужно не количество, а именно все возможные варианты гамет
Перевожу вам что уже сказано выше:
Если всем пренебречь, то это все числа от 0b до

b, где

—число различных пар.
Там, правда, должно быть так "это все числа от

до

", ну не суть. Одним меньше, одним больше
По сути у вас сколько-то двоичных разрядов (столько сколько пар разных генов, т.е. где есть выбор). Допустим таких три, тогда вариантов

Обычно их перебирают так.








Справа номер варианта (нумерация с нуля) в десятичной системе счисления, а слева -- представление этого номера в двоичной системе счисления. Допустим ноль это левый символ из пары, а единица - правый. Тогда скажем
Ww Ss Oo перебираются так
000=WSO (три нуля - три левых символа)
001=WSo010=WsO011=Wso100=wSO101=wSo110=wsO111=wso (три единицы - три правых символа)
Если у вас там скажем вклиниваются одинаковые пары, например
Ww aa Ss DD Oo то перебирать все равно

вариантов гамет т.к. гены
a и
D не меняются и есть в любой гамете, а меняется только три гена
Ww,
Ss и
Oo:
000=WaSDO001=WaSDo010=WasDO011=WasDo100=waSDO101=waSDo110=wasDO111=wasDoПонятно вам, сможете это запрограммировать? Так вы можете сделать взаимно-однозначное соответствие номера варианта и соответствующего ему набора. Причем никаких рекурсий, все вычисляется "напрямую", прямо из номера.