Kod napisany w Javie, ale niewiele się różni od C# więc spokojnie będziesz wstanie go zrozumieć:
Wersja rekurencyjna:
public void printCombinations(int[] numbers, int length){
for(int number : numbers){
helper("" + number, numbers, length);
}
}
private void helper(String result, int[] numbers, int length){
if(result.length() == length){
System.out.println(result);
}else{
for(int number : numbers){
helper(result + number, numbers, length);
}
}
}
Wersja iteracyjna:
public void printCombinations(int[] numbers, int length){
List<String> combinations = new ArrayList<>();
for(int number : numbers) combinations.add(number + "");
while(!combinations.isEmpty()){
String result = combinations.get(0);
if(result.length() < length){
for(int number : numbers) combinations.add(result + number);
}else{
System.out.println(result);
}
combinations.remove(result);
}
}
Jeżeli czegoś nie zrozumiesz, to powiedz.