Thread rekursive subroutine (11 answers)
Opened by kimmy at 2014-02-06 14:52

Linuxer
 2014-02-06 23:00
#173442 #173442
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Ist die Rekursion denn zwingend erforderlich?

Ohne das genaue Anforderungsprofil zu kennen, könnte das unten stehende auch eine Lösung sein; nur ohne Rekursion; voll auflösend mit Grundbedingungen/-annahmen.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#! /usr/bin/perl
use strict;
use warnings;

my %data;

while ( my $line = <DATA> ) {

    # skip empty or commented lines
    next if $line =~ m/^\s*($|#)/;

    chomp $line;
    my ( $key, @values ) = split m/\s*[:,]\s*/, $line;

    # resolve references to previously defined keys (and delete those when resolving)
    @values = sort map { m/[\d+]/ && exists $data{$_} ? @{delete $data{$_}} : $_ } @values;
    
    $data{$key} = \@values;
}

# check result
for my $k ( sort keys %data ) {
    local $" = ", ";
    print "$k: @{$data{$k}}\n";
}

# RESULT:
# [9]: a, b, c, d, e, f, g, h, i, j


__DATA__
# [x] : Knoten || a, b : Blaetter
# - ein Knoten wird nur ein einziges Mal referenziert
# - ein Knoten referenziert nur einen anderen Knoten, der zuvor definiert wurde
# - wird ein Knoten referenziert, wird diese Referenz aufgelöst und durch die Blaetter ersetzt
[1]: a, b
[2]: c, [1]
[3]: d, e
[4]: f, [3]
[5]: g, h
[6]: i, [5]
[7]: [2], [4]
[8]: j, [6]
[9]: [7], [8]
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread rekursive subroutine