perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 25
Click for quality!




11.02.2012 / 21:30

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragZu tiefe Rekursion?
Seitenanfang
Hallo Leute hätte da mal ne Frage zu einem Script von mir...bin noch ziemlicher perl anfänger....
Folgendes Script rechnet mir die Auswahl von k aus n möglichen Elementen aus. Komischer weise hängt das script bei n >= 10 warum versteh ich nicht ganz.....
Liegt das an der Rekursion?


#!/usr/bin/perl
no utf8;
use strict;

my @umlaute = qw (a b c d e f g h i);
my @result = ();

sub getCharCount {
my $str = $_[0];

my $count = $str =~ tr/\_/\_/;
return $count;
}

sub permutation {
my $k = $_[0];
my $n = $_[1];
my $b = $_[2];
my $string = $_[3];

if(length($b)==$k) {
#print $b.", ";
my @chars = split(//, $b);

for(my $i=0; $i<@chars; $i++){
$string =~ s/\_/$umlaute[$chars[$i]-1]/e;
}
push(@result, $string);
}
else{
for(my $i=1; $i<=$n; $i++){
permutation($k,$n,$b.$i,$string);
}
}
}

############### M A I N ####################

my $string = "V_r";
my $char_count = getCharCount($string);
my $umlaut_count = scalar @umlaute;

print "Char_Count: <".$char_count.">\tUmlaut_count: <".$umlaut_count.">\n";
print "Anzahl der Kombinationen :".$umlaut_count**$char_count."\n\n";

permutation($char_count, $umlaut_count, "", $string);

for(my $i=0; $i<@result; $i++){
print $result[$i]."\n";
}

Datum: 17.05.2005-11:03

Beitragre: Zu tiefe Rekursion?
Seitenanfang
Hi,

was passiert mit "$n" bleibt immer auf dem gleichen Wert stehen?

perlbert

Datum: 18.05.2005-23:28

Beitragre: Zu tiefe Rekursion?
Seitenanfang
Ja klar bleibt das immer auf dem gleichen Wert...ist ja auch Sinn der Sache....$n ist die Anzahl der buchstaben, aus denen die $k-stelligen kombinationen berechnet werden.
Aber vergiss den Beitrag einfach ich habe das Problem schon gelöst....
Das Problem lag daran, dass ich den skalar $b verwendet habe um alle Kombinationen aneinander zu hängen z.B: bei einer 2 stelligen Buchstabenmenge sind alle 2 stelligen kombinationen 1 1, 1 2, 2 1, 2 2 wobei die Zahlen hier als array-index-1 dienen um den betreffenden Buchstaben aus dem buchstaben array zu holen. Das Problem bei mir war, dass wenn ich n > 10 gewählt habe der arrayindex ja zweistellig wird und ich diesen aus einem skalar nicht mehr extrahieren kann (zumindest nicht ohne Trennzeichen)
Die Lösung des Problems ist z.B. die Verwendung eines arrays für das speichern der Stellen...
Das hat bei mir dann auch einwandferi funktioniert...

Trotzdem danke für deine Bemühungen...

lg

Datum: 20.05.2005-16:08

-






-
-