Ackermmanfunktion rekursiv

Diskutiere Ackermmanfunktion rekursiv im Java Basics - Anfänger-Themen Bereich.
A

arhzz

Hallo! Uns wurde diese methode gegeben die rekursiv die Ackermmanfunktion implementiert. Das ist das Bildungsgetzt;

a(0,m) = m + 1
a(n + 1,0) = a(n,1)
a(n +1, m +1) = a(n,a(n+1,m))

Und das ist die methode:

Java:
public class test {
    public long ack(long n, long m) {
        if( n == 0) {
            return m+1;
        }
        else if(m == 0) {
            return ack (n-1,1);
        }
        else {
            return ack(n-1,ack(n,m-1)); 
        }
    }
    
}

Jetzt verstehe ich nicht so ganz diese return statements, bzw. von wo diese n-1, m-1... kommen. Welche Logik verwendet man um zu wiesen was für ein return man braucht so dass man die Ackermmanfunktion rekursiv berechnet. Danke!
 
J

JennyL

Niemand auf der Welt kann die Ackermann Funktion erklären... folglich ist deine Frage nicht zu beantworten.
Wer dir diese Frage gestellt hat, tat dies hoffentlich in keiner bösen Absicht.
 
L

LimDul

Hallo! Uns wurde diese methode gegeben die rekursiv die Ackermmanfunktion implementiert. Das ist das Bildungsgetzt;

a(0,m) = m + 1
a(n + 1,0) = a(n,1)
a(n +1, m +1) = a(n,a(n+1,m))

Und das ist die methode:

Java:
public class test {
    public long ack(long n, long m) {
        if( n == 0) {
            return m+1;
        }
        else if(m == 0) {
            return ack (n-1,1);
        }
        else {
            return ack(n-1,ack(n,m-1));
        }
    }
   
}

Jetzt verstehe ich nicht so ganz diese return statements, bzw. von wo diese n-1, m-1... kommen. Welche Logik verwendet man um zu wiesen was für ein return man braucht so dass man die Ackermmanfunktion rekursiv berechnet. Danke!
Das ist doch einfach nur die Bildungsgesetze umgesetzt.

Da ist definiert, für 0, m kommt m+1 raus
=> In Java, wenn n gleich 0 ist, liefere m+1 zurück.

usw. Ich versehe deine Frage daher nicht so ganz, evtl. musst du sie nochmal umformulieren/erklären.
 
MoxxiManagarm

MoxxiManagarm

, bzw. von wo diese n-1, m-1... kommen.
Gegegen ist z.B. die Vorschrift a(n+1,0) = a(n,1)

Hier steht halt links das n+1. Da deine Funktion aber n als Parameter hat und nicht n+1 musst du dir diese Vorschrift umstellen, damit links das n steht. Als äquivalente Vorschrift erhältst dua(n, 0) = a(n-1, 1). Jetzt steht rechts die n-1, welche du im Code siehst.

Auf die gleiche Weise kommst du auch zu dem m-1 in der 3. Vorschrift.
 
A

arhzz

Gegegen ist z.B. die Vorschrift a(n+1,0) = a(n,1)

Hier steht halt links das n+1. Da deine Funktion aber n als Parameter hat und nicht n+1 musst du dir diese Vorschrift umstellen, damit links das n steht. Als äquivalente Vorschrift erhältst dua(n, 0) = a(n-1, 1). Jetzt steht rechts die n-1, welche du im Code siehst.

Auf die gleiche Weise kommst du auch zu dem m-1 in der 3. Vorschrift.
Ja, verstehe es jetzt, vielen Dank!
 
Thema: 

Ackermmanfunktion rekursiv

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben