Je le ferais comme un appel récursif, une fonction pour faire toute une longueur spécifique, une autre pour appeler cela pour toutes les longueurs pertinentes. Le complet après l'application de la console C# 2008 montre ce que je veux dire:
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);
}
}
}
Ce sorties:
0
1
00
01
10
11
000
001
010
011
100
101
110
111
qui est ce que je pense que vous étiez après.
un coup d'oeil sur http://www.codeproject.com/KB/recipes/Combinatorics.aspx – Hoque