Я бы сделал это как рекурсивный вызов, одну функцию для выполнения всей определенной длины, другую - для всех соответствующих длин. Следующее полное консольное приложение C# 2008 показывает, что я имею в виду:
using System;
namespace ConsoleApplication1 {
class Program {
static void permuteN(string prefix, int len) {
if (len == 0) {
System.Console.WriteLine(prefix);
return;
}
permuteN(prefix + "0", len - 1);
permuteN(prefix + "1", len - 1);
}
static void permute(int len) {
for (int i = 1; i <= len; i++)
permuteN("", i);
}
static void Main(string[] args) {
permute(3);
}
}
}
Воспроизводит:
0
1
00
01
10
11
000
001
010
011
100
101
110
111
что то, что я думаю, что вы были после.
взглянуть на http://www.codeproject.com/KB/recipes/Combinatorics.aspx – Hoque