Ну, очевидно, вы не можете хранить промежуточные результаты в памяти (если у вас нет какого-то абсурдного компьютера в вашем распоряжении);вам нужно будет записать результаты на диск.
Глубина рекурсии не зависит от количества рассматриваемых символов - она определяется максимальной длиной строки, которую вы готовы учитывать.
Например, моя установка python 2.6.2 имеет предел рекурсии по умолчанию, установленный на 1000. Аргументируемый, я должен быть в состоянии генерировать все возможные строки длиной 1-1000 с учетом набора символов в пределах этого ограничения (теперь, я думаю, что предел рекурсии применяется к общей глубине стека, поэтомупредел может быть меньше 1000).
Редактировать (добавлен пример Python): Следующий фрагмент кода Python произведет то, что вы запрашиваете (ограничивая себя заданными пределами стека времени выполнения):
from string import ascii_lowercase
def generate(base="", charset=ascii_lowercase):
for c in charset:
next = base + c
yield next
try:
for s in generate(next, charset):
yield s
except:
continue
for s in generate():
print s
Можно получить практически то же самое в C #, попробовав / поймав исключение StackOverflowException.Когда я набираю это обновление, скрипт работает, жуя одно из моих ядер.Тем не менее, использование памяти является постоянным и составляет менее 7 МБ.Теперь я печатаю только на стандартный вывод, поскольку мне не интересно запечатлеть результат, но я думаю, что это доказывает вышеприведенную точку.;)
Добавление к примеру: Интересное примечание: Если присмотреться к запущенным процессам, Python фактически связан с вводом-выводом в приведенном выше примере.Он использует только 7% моего ЦП, в то время как остальная часть ядра привязана к выводу результатов в моем командном окне.Минимизация окна позволяет Python подняться до 40% от общего использования ЦП, это на 2-ядерном компьютере.