# Alle möglichen Permutationen einer Folge n



## Garfield83 (30. Apr 2008)

Hallo,
Ich hätte ein Problem:
Ich möchte bei einer Eingabe 'n' alle Permutationen von 1:n rekursiv ausgeben lassen.
Ich hatte jetzt schon einen für mich recht viel versprechenden Ansatz. 
Man führt ein array und einen Vector und nimmt sich immer aus dem Vector einen Wert und übergibt diesen Wert quasi an das Array, dann gibts einen rekursiven Aufruf. 
So in der Theorie sollte das meiner Meinung nach auch funktionieren. Aber tuts leider nicht.
Hier mal mein Algorithmus, vielleicht hat ja jemand hierfür eine bessere Idee, oder kann den Fehler finden, der dazu führt, dass die for Schleife nicht weiterläuft. ((Bekomme einen indexoutof bounds Fehler))

```
import java.util.Arrays;
import java.util.Vector;

public class Permutation {
	
	public static void permutation(int n){
		int[] x= new int[n];
		Vector<Integer> y = new Vector<Integer>();
		for(int j=1;j<=n;j++){
			y.addElement(j);
		}
		permute(n,x,y);
	}
	// es wird immer ein inthilfsarray übergeben mit einer Zahl gestrichen
	// Also es wird immer eine Zahl aus y-> x verschoben
	public static void permute(int n, int[] x,Vector<Integer> y){
		for(int i=0; i<n; i++){
			x[n-1]=y.elementAt(i);
			// der comment dient hier nur dem bugtracking
			System.out.println(i + " Missisippi"); 
			Vector z= new Vector();
			z=y;
			z.removeElementAt(i);
			// so hier muss aus y der Wert rausgelöscht werden
			permute(n-1,x,z);
			if(n==1){
				System.out.println(Arrays.toString(x));
			}
		}
	}
	public static void main(String[] args){
		permutation(3);
	}
}
```

Momentane Ausgabe:


> 0 Missisippi
> 0 Missisippi
> 0 Missisippi
> [3, 2, 1]
> ...


----------



## maki (30. Apr 2008)

int[] x= new int[n];
      Vector<Integer> y = new Vector<Integer>();
      for(int j=1;j<=n;j++){

Arrays fangen bei 0 an, sollte also j<n anstatt j<=n heissen.


----------



## Garfield83 (1. Mai 2008)

Sorry das ich jetzt erst antworte:
Also die von dir angesprochene Vorschleife ist so gedacht:
Wenn die vorshleife von 1:8 geht, dann soll der Vector mit den Werten 1:8 gefüllt werden.


----------



## Gast (1. Mai 2008)

Im übrigen habe ich den Fehler gefunden ... 
z=(Vector<Integer>) y.clone(); 
anstelle von z=y


----------

