Я предполагаю, что, говоря, что это легко для фиксированной длины, вы используете m вложенных циклов, где m - длина последовательности примеры).
Вы можете использовать рекурсию следующим образом:
Ваши слова пронумерованы 0, 1, .. n, вам нужно сгенерировать все последовательности длиной m :
generate all sequences of length m:
{
start with 0, and generate all sequences of length m-1
start with 1, and generate all sequences of length m-1
...
start with n, and generate all sequences of length m-1
}
generate all sequences of length 0
{
// nothing to do
}
Как это реализовать? Что ж, при каждом вызове вы можете поместить еще один элемент в конец массива, а когда вы достигнете конца рекурсии, выведите содержимое массива:
// m is remaining length of sequence, elements is array with numbers so far
generate(m, elements)
{
if (m == 0)
{
for j = 0 to elements.length print(words[j]);
}
else
{
for i = 0 to n - 1
{
generate(m-1, elements.push(i));
}
}
}
И, наконец, назовите это так: generate (6, array ())