Thread Über Primitive Sinnfreiheit: zieh dich besser warm an (16 answers)
Opened by renee at 2004-07-14 02:13

esskar
 2004-07-14 13:58
#19538 #19538
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hier mal meine 3 version der ackermann funktion (in lesbarer form):

Code: (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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
sub ackermann_def
{
   my ($x, $y) = @_;

   if($x == 0)
   {
       return ($y+1);
   }
   elsif($y == 0)
   {
       return ackermann_def($x-1, 1);
   }
   else
   {
       my $z = ackermann_def($x, $y-1);
       return ackermann_def($x-1, $z);
   }
}

sub ackermann_1rekursion
{
   my ($x, $y) = @_;

   while(1)
   {
       if($x == 0)
       {
           return ($y+1);
       }
       elsif($y == 0)
       {
           $x--;
           $y = 1;
       }
       else
       {
           $y = ackermann_1rekursion($x, $y-1);
           $x--;
       }
   }
}

sub ackermann_0rekursion
{
   my ($x, $y) = @_;

   my @stack = ();
   while((defined $x and $x > 0) || ((scalar @stack) != 0))
   {
       if($x == 0)
       {
        $x = pop @stack;
        $y++;
       }
       elsif($y == 0)
       {
        $y = 1;
        $x--;
       }
       else
       {
        $y--;
        push @stack, ($x-1);
       }
   }

   return ($y + 1);
}


wie man sieht, macht eigentlich nur die zweite rekursion probleme!\n\n

<!--EDIT|esskar|1089805274-->

View full thread Über Primitive Sinnfreiheit: zieh dich besser warm an