Hallo,
ich hoffe mir kann Jemand bei den Details einer Sache helfen.
Ich mache mal ein vereinfachtes Beispiel von dem was ich vorhabe:
Kann sein dass einige Befehle nicht perfekt sind, soll mehr als Algorithmusskizze dienen.
Um was es mehr geht:
Kann ich das so machen dass ich in der for each schleife, die ja durch die elemente der Lsite numbers iteriert, die lsite selbst um das gerade gewählte element verkürze?
Endresultat dieser recurs Methode soll sein dass eben alle Anordnungen von Elementen aus numbers gedruckt werden.
Dass das Ganze auch ohne Rekursion besser geht, wieß ich.
Aber bei meiner eigentlichen Aufgabe, mit der ich mich befasse (Blackjack) komme ich da nicht um die Rekursion drum herum.
Hier im Beispiel stelle man sich das Klassisch vor wie im Kombinatorikunterricht, Shcüssel mit 10 durchnummerierten Kugeln, der Reihe nahc werden 5 Kugeln getroffen.
Am Ende soll die Liste aller möglichen 5Tupel da stehen.
Nur befürchte ich, dass wenn ich in der for each schleife die Liste um ein element verkürze, jenes Element bei der Iteration nicht mehr zur verfügung steht.
Oder wie macht das java, ist da die Lsite über die Iteriert wird, "fest" (weil sich java bspw. eine kopie davon macht, über di letztlich die iteration läuft)?
Oder führt das shcleifeninterne Elemententfernen zu unerwarteten Ergebnissen bei der Iteration?
Falls ja, gibts unter Beibehaltung der Rekursion und so eine Möglichkeit, diese Effekte zu vermeiden (ausser halt vor jeder for each shcleife eine Listenkopie zu erzegen, über die stattdessen iteriert wird)?
ich hoffe mir kann Jemand bei den Details einer Sache helfen.
Ich mache mal ein vereinfachtes Beispiel von dem was ich vorhabe:
Java:
public class Test{
List<Integer> numbers=new Arraylist<Integer>;
List<Integer> result=new ArrayList<Integer>;
public void main (String[] args){
Test obj=new Test();
}
public Test(){
for(int i=1;i<10;i++){
numbers.add(i);
}
recurs();
}
public void recurs(){
if(result.getLength()>=5){
//result Liste drucken
return;
}
for(int a:numbers){
numbers.remove(a);
result.add(a);
recurs();
result.remove(a);
}
}
}
Kann sein dass einige Befehle nicht perfekt sind, soll mehr als Algorithmusskizze dienen.
Um was es mehr geht:
Kann ich das so machen dass ich in der for each schleife, die ja durch die elemente der Lsite numbers iteriert, die lsite selbst um das gerade gewählte element verkürze?
Endresultat dieser recurs Methode soll sein dass eben alle Anordnungen von Elementen aus numbers gedruckt werden.
Dass das Ganze auch ohne Rekursion besser geht, wieß ich.
Aber bei meiner eigentlichen Aufgabe, mit der ich mich befasse (Blackjack) komme ich da nicht um die Rekursion drum herum.
Hier im Beispiel stelle man sich das Klassisch vor wie im Kombinatorikunterricht, Shcüssel mit 10 durchnummerierten Kugeln, der Reihe nahc werden 5 Kugeln getroffen.
Am Ende soll die Liste aller möglichen 5Tupel da stehen.
Nur befürchte ich, dass wenn ich in der for each schleife die Liste um ein element verkürze, jenes Element bei der Iteration nicht mehr zur verfügung steht.
Oder wie macht das java, ist da die Lsite über die Iteriert wird, "fest" (weil sich java bspw. eine kopie davon macht, über di letztlich die iteration läuft)?
Oder führt das shcleifeninterne Elemententfernen zu unerwarteten Ergebnissen bei der Iteration?
Falls ja, gibts unter Beibehaltung der Rekursion und so eine Möglichkeit, diese Effekte zu vermeiden (ausser halt vor jeder for each shcleife eine Listenkopie zu erzegen, über die stattdessen iteriert wird)?