Entwicklung rekursiver Prädikate

Werbung
Entwicklung rekursiver Prädikate
Thema II: Kombinatorik
A. Schächinger, M. Oswald, R. Banka, S. Krüger
Aufgabe 1
Fakultät-Definition:
Die Fakultät ist eine mathematische Kurzschreibweise für das Produkt der ersten n natürlichen
Zahlen, und wird mit dem "!"-Zeichen abgekürzt. Für negative Zahlen ist die Fakultät nicht
definiert.
0! = 1; (n+1)! = n!·(n+1)
Fakultät Prolog
fak(0,1).
fak(X, Fakultaet):-X > 0,
Y is X - 1,
fak(Y,Z),
Fakultaet is Z * X.
Fibonacci-Definition:
Die ersten beiden Zahlen sind als 1 festgelegt. Die folgenden Zahlen ergeben sich durch Summieren
der beiden jeweils vorangehenden Zahlen.
Bsp: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...
f(1) = 1
f(2) = 1
f(n+2) = f(n) + f(n+1)
Fibonacci-Folge Prolog
fib(1,1).
fib(2,1).
fib(N, F):-N > 1,
N1 is N - 1,
N2 is N - 2,
fib(N1,F1),
fib(N2,F2),
F is F1 + F2,!.
Aufgabe 4
variohne(N,K,V):-N>K,
fak(N,K1),
K2 is N-K,
fak(K2,K3),
V is K1//K3.
varimit(_,0,1).
varimit(N,K,E):-K1 is K-1,
varimit(N,K1,E1),
E is E1*N.
kombiohne(_,0,1).
kombiohne(N,N,1).
kombiohne(N,K,Ko):-N1 is N-1,
K1 is K-1,
N>K,
kombiohne(N1,K1,Ko1),
kombiohne(N1,K,Ko2),
Ko is Ko1+Ko2,!.
kombimit(N,K,Ko):-N1 is N+K-1,
kombiohne(N1,K,Ko).
Aufgabe 3
Java Fakultät
public class fakultaet
{
public int fak (int n)
{
if ( n==0 )
{
return 1;
}
else
{
return n * fak(n-1);
}
}}
Java Fibonacci
public class fibonacci
{
public static long fib(int a){
if (a==1||a==2) return 1;
else return fib(a-1)+fib(a-2);
}}
Vergleich
Deklarativ
Vergleich
Imperativ
Expliziete Festlegung > fak(0,1).
public class fakultaet
{
public int fak (int n)
< n wird initalisiert
X muss über 0 > fak(X, Fakultaet):-X > 0,
< wenn N = 0
Fakultät von Z >
{
Y ergibt sich >
if ( n==0 )
{
Fakultät wird berechnet
return 1;
< gebe 1 aus
}
else
{
return n * fak(n-1);
}}}
< Ausgabe der Faultät
Y is X - 1,
Fak(Y,Z),
Fakultaet is Z * X.
Herunterladen