sub combinations { # übernehme die Karten my @cards=@_; # wenn keine Karten an die Funktion übergeben wurden liefere eine leere Liste zurück return [] unless (@cards); wenn nur eine Karte in der Liste ist dann liefere nur die Liste zurück return \@cards if(@cards==1); # erzeuge die liste mit den restlichen Kombinationen: my @ret; # solange noch karten vorhanden sind: while(@cards) { # nimm die erste Karte heraus my $card=shift(@cards); # füge diese Karte des RückgabeArrays hinzu push(@ret,[$card]); # rufe die Funktion selber wider auf und gehe das Ergebnis durch (ist ein array) # das ist rekursive teil, das die Funktion sich immer wieder selber aufruft, # die übergebene liste ist aber immer um ein Element kürzer # darum kommt die Rekursion irgendwann zu einem Ende (siehe oben) for my $r (combinations(@cards)) { # $r enthält eine Arrayrefenz! # füge die herausgenommene Karte wieder ein # und füge die das dem RückgabeArray hinzu push(@ret,[@$r,$card]) if(@$r); } } # gib das RückgabeArray zurück return @ret; }