i

Anwendung - Operationen auf natürlichen Zahlen

Operationen auf natürlichen Zahlen

Operationen auf natürlichen Zahlen lassen sich alle aus einer einzigen Grundoperationen entwickeln. Man benötigt hierzu nur die Nachfolger-Operation s: N -> N, die jeder natürlichen Zahl n ihren Nachfolger s(n) zuordnet.

Betrachte als Beispiel die Definition der Additionsfunktion add. Die folgenden Problemreduktionsregeln legen für alle Paare natürlicher Zahlen die Addition fest.

add(x,0) -> x
add(x,s(y)) -> s(add(x,y))

In Python kann man diese beiden Reduktionsregeln folgendermaßen implementieren:

def s(x):
    return x+1

def p(x):
    return x-1

def add(x, y):
    if y == 0:
        return x
    else:
        return s(add(x, p(y)))

Aufgabe 1

Berechne mit einer Reduktionskette den Wert add(2, 3).

add(2, 3) ->
s(add(2, 2)) ->
...

Teste auch die oben gezeigte Implementierung der Funktion add.

Aufgabe 2

Die folgenden Reduktionsregeln definieren eine Funktion subtr.

subtr(x,0) -> x
subtr(0, y) -> 0
subtr(s(x),s(y)) -> subtr(x,y)

Was leistet dies Funktion? Beschreibe ihr Verhalten möglichst präzise. Beachte auch die Besonderheit der Definition.

Implementiere die Funktion in Python und überprüfe, ob das Verhalten richtig beschrieben ist.

Aufgabe 3

Entwickle Reduktionsregeln zur Definition einer Funktion mult.

mult(x,0) -> 
mult(x,s(y)) -> 

Implementiere die Reduktionsregeln und teste das Verhalten der neu definierten Funktion.

Aufgabe 4

Die folgenden Regeln beschreiben, wie man eine Vergleichsoperation auf natürlichen Zahlen festlegen kann.

equal(0, 0) -> 1
equal(s(x), 0) -> 0
equal(0, s(y)) -> 0
equal(s(x), s(y)) -> equal(x, y)

Welcher Vergleich wird hier festgelegt? Wie werden Wahrheitswerte als Ergebnisse eines Vergleichs codiert?

Definiere analog die Vergleichsoperation gt (greater than), lt (less than), geq (greater or equal) und leq (less or equal).

Aufgabe 5

Definiert die folgende Regel wirklich das Minimum zweier natürlicher Zahlen?.

min(x,y) -> add(mult(lt(x,y),x),mult(geq(x,y),y))

Wie könnte man entsprechend das Maximum zweier natürlicher Zahlen festlegen?

Aufgabe 6

Wie könnte man die Divisionsoperationen div und mod rekursiv definieren?

Aufgabe 7

Für Experten: Schaffst du es auch, eine Operation prime rekursiv zu definieren, mit der man überprüfen kann, ob eine Zahl eine Primzahl ist. Tipp: Definiere zuerst eine Operation divleq(x, y), mit deren Hilfe man die Anzahl der Teiler von x kleiner oder gleich der Grenze y bestimmen kann.

Suche

v
2.2.4.4
dev.inf-schule.de/algorithmen/rekursivealgorithmen/rekursionzahlen/fallstudie_rekursivefunktionen
dev.inf-schule.de/2.2.4.4
dev.inf-schule.de/@/page/xx3Xkh9zRK5BTZok

Rückmeldung geben