REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine...

124
REKURSION + ITERATION

Transcript of REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine...

Page 1: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

REKURSION + ITERATION

Page 2: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Bemerkung:Die in den folgenden Folien

angegebenen "Herleitungen" sind keine exakten Beweise, sondern

Plausibilitätsbetrachtungen.Die exakten Beweise wurden dazu

in einem anderen Dokument gemacht.

Page 3: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Produktion von wunderbaren Zahlen.

Page 4: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Dazu werden natürlich wieder die Regeln (zur Produktion) verwendet.

Diese sind…

Page 5: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

--- 3

--- 5

{r; s} ------ wobei rX={1; 2; 3; ...} und sX und r s

r+s

Regel 1, kurz R1

Regel 2, kurz R2

Regel 3, kurz R3

Zu einer Regel, die an der die leere Menge beteiligt ist, sagt man auch Axiom.Wir sagen zu den "Produkten" 3 und 5 jeweils Atom.

Page 6: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Die Produktion beginnt wie üblich mit dem

"Urknall" (= leere Menge).D0 =

Welche Menge D1 wird dann danach produziert ?

Welche Regel kann man dazu anwenden (verwenden)?

Page 7: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Da es für den "Urknall" nur 2 Regeln gibt, kann man

nur R1 und R2 verwenden. Also…

Page 8: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Aus dieser wird dann wieder (mit Hilfe von R1 und R2) die Menge D1

gebastelt

3

Mit der leeren Menge beginnt alles

5

Wie sieht die Menge D2 aus? Wie wird sie gebastelt?

Page 9: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Man darf jetzt beliebige Teilmengen aus D1 auswählen

und auf diese eine Regel anwenden. Was ist die kleinste

Teilmenge in D1?3 5

Das ist die leere Menge. Welche Regeln kann man darauf anwenden?

R1 und R2, also bekommt man die Elemente…

3 5 Auf welche weitere Teilmenge von D1 kann man welche Regel anwenden ?

Auf die Menge {3;5} . Dies ergibt das neue Element 3+5 = 8

8

D1

D2

Page 10: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Man darf jetzt beliebige Teilmengen aus D2 auswählen

und auf diese eine Regel anwenden. Was ist die kleinste

Teilmenge in D2?

3 5

Das ist die leere Menge. Welche Regeln kann man darauf anwenden?

R1 und R2, also bekommt man die Elemente…

3

5

Auf welche weitere Teilmenge von D2 kann man welche Regeln anwenden ?

Auf die Mengen {3;5}. Dies ergibt dann das neue Element 3+5 = 8

D2

D3

8

8

Page 11: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

3 5

3

5

D2

D3

8

8

Auf welche weitere Teilmengen von D2 kann man welche Regeln anwenden ?

Auf die Mengen {3;8}, {5;8} . Dies ergibt dann die neuen Elemente 3+8=11, 5+8=13

11 13

Dies geht unendlich oft weiter …

Die Vereinigung all dieser Mengen ist die zu konstruierende GesamtmengeD = {3;5;8;11;13; …} der wunderbaren Zahlen

Welche mengentheoretische Beziehung besteht zwischen D0, D1, D2, D3, usw. ?

D0 D1 D2 D3 … D

Page 12: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

3

5

D3

8

Uns interessiert nun, ob eine Zahl zu der Gesamtmenge D gehört oder nicht. Dazu definiert man die Funktion e (wie evaluate) mit …

11 13 e(x) = 1 <==> x D unde(x) = 0 <==> x D

Berechnen Sie dazu e(1), e(2), e(3), e(4), e(5), e(6), e(7), e(8)e(1)=0, e(2)=0, e(3)=1, e(4)=0, e(5)=1, e(6)=0, e(7)=0, e(8)=1

1 könnte man auch als W (wahr) und 0 als F (falsch) interpretieren.

Page 13: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Man könnte nun eine Funktion e(int z) implementieren, die feststellt, ob die Zahl z zu D gehört oder nicht.Wie könnte man dies iterativ machen?

Page 14: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Wiederholt werden aus der alten Menge die neuen Elemente berechnet und dieser Menge hinzugefügt. Dies muß hinreichend oft gemacht werden.

Page 15: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Wie kann dies rekursiv realisiert werden …?Beachten Sie dazu folgende Informationen ...

Page 16: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D = {3 ; 5 ; 8 ; 11; 13; ...}

3D und 5D ==> ?

Was folgt daraus, d.h. welche Zahl gehört dann auch zu D ?

Page 17: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D = {3 ; 5 ; 8 ; 11; 13; ...} Man sieht sofort:

3D und 5D ==> 3+5D

Page 18: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D = {3 ; 5 ; 8 ; 11; 13; ...} Allgemeiner:rD und sD ==> ?

Was folgt daraus, d.h. welche Zahl gehört dann auch zu D ?

Page 19: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D = {3 ; 5 ; 8 ; 11; 13; ...} Allgemeiner:rD und sD ==> r+sD

Page 20: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D = {3 ; 5 ; 8 ; 11; 13; ...} Gilt dies auch umgekehrt ?D.h:r+sD ==> rD und sDWenn dies nicht gelten sollte, geben Sie bitte ein Gegenbeispiel an.

Page 21: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D = {3 ; 5 ; 8 ; 11; 13; ...} r+sD ==> rD und sDDiese Aussage ist falsch, denn aus 8D folgt NICHT 1D und 7D

Page 22: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D = {3 ; 5 ; 8 ; 11; 13; ...} r+sD ==> rD und sDKann man diese Aussage so abändern, daß sie korrekt wird ? Bedenken Sie dazu, daß zwar ...

Page 23: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D = {3 ; 5 ; 8 ; 11; 13; ...} 8D ==> 1D und 7D falsch, aber8D ==> 3D und 5D richtig ist.

Page 24: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

8D <==> 1D 7D 2D 6D 3D 5D

d.h. in mindestens einer Zerlegung müssen alle 2 Zahlen aus D sein !

Page 25: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

8D <==> 1D 7D 2D 6D 3D 5D

bzw. wenn man die Schreibweise mit e(...) verwendet ...

Page 26: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

e(8)=1 <==> e(1)=1 e(7)=1 e(2)=1 e(6)=1 e(3)=1 e(5)=1

oder wenn man statt und lieber * und + schreibt:

Page 27: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

e(8)=1 <==> e(1)=1 * e(7)=1 + e(2)=1 * e(6)=1 + e(3)=1 * e(5)=1

Wie kann man e(8) aus e(1), ..., e(7) berechnen?e(8)=e(1)+e(2)+...e(7) wäre z.B. nicht korrekt!

Page 28: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

e(8) = e(1) * e(7) +

e(2) * e(6) +

e(3) * e(5)

Welchen Wert haben e(1), ..., e(7) und wie berechnet man daraus e(8) ?

1 1

0 0

001

Page 29: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

e(8) = e(1) * e(7) +

e(2) * e(6) +

e(3) * e(5)

e(8) wird rekursiv, d.h. durch die Verwendung von "vorigen" Werten e(1), ..., e(7) berechnet.

1 1

0 0

001

Page 30: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Dies kann man auch etwas mathematischer darstellen:

Page 31: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

e(8) = e(x1) * e(x2) {x1,x2}K(8)

wobei K(x) die zu x gehörende Kandidatenmenge ist.K(8) = { {1, 7}, {2, 6}, {3, 5} }

Page 32: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Weitere rekursive Berechnungen?

Page 33: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

e(5) = ?Wie berechnet man aber e(5) rekursiv, d.h. kann e(5) durch Verwendung von e(1), ..., e(4) berechnet werden ?

Page 34: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Nein, denn 5wird direkt aus der leeren Menge produziert Also ist e(5) = 1

Page 35: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

e(2) = ?Wie berechnet man aber e(2) rekursiv, d.h. kann e(2) durch Verwendung von e(1) berechnet werden ?

Page 36: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Nein, denn 2 kann nicht als Summe zweier verschiedener Zahlen ≥1 dargestellt werden. Da 2 auch nicht aus der leeren Menge produziert wird, gilt e(2) = 0

Page 37: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Rekursive Berechnung von e(7) Aus welchen Elementen aus D könnte die 7 theoretisch produziert worden sein?

Page 38: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

7

1, 6 3, 42, 5

1, 50

00 0

0

1 0

1

1

Wie groß ist jeweils e(b), d.h. welchen Wert haben die roten Blätter ?

e(6)= 0*1+0*0

e(7)= 0*0+0*1+1*0

2, 4

1, 310

1, 3100

e(4)=0*1

e(4)=0*10

Page 39: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Insgesamt ergibt dies die folgende mathematische Formel:

Page 40: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

// Kandidatenmenge leer:Fall: K(x) = ==> e(x) = 0

// x kommt direkt nach dem Urknall:Fall: K(x) ==> e(x) = 1

Fall: sonste(x) = e(x1) * e(x2) {x1,x2}K(x)

Page 41: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Bevor wir die zugehörige Funktion e(...) implementieren, machen wir noch ein paar Überlegungen ...

Page 42: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Wie kann man die folgende Formel implementieren?

e(x) = e(x1) * e(x2) {x1,x2}K(x)

Man kann die zu x gehörige Kandidaten K(x) bestimmen und in ein Feld v eintragen.Für K(15) wäre dies z.B:

1 14 2 13 3 12 4 11 5 10 6 9 7 8

Was muß dann noch berechnet werden ?

e(1)*e(14) + e(2)*e(13) + e(3)*e(12) + e(4)*e(11)+

e(5)*e(10) + e(6)*e(9) + e(7)*e(8)

Angenommen, die Funktion e(x) würde schon implementiert sein.Implementieren Sie e(1) * e(14) + ... + e(7) * e(8)

e(15) =

Page 43: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

...int sum=0;

for(i=1;i<15;i=i+2){ sum = e(i)*e(15-i)+sum;}...

Page 44: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Annahme: Das Feld v ist sehr groß.

Wie könnte man die Laufzeit (Performance) des Programms verbessern ?

Beachten Sie dazu Folgendes:

Page 45: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

e(1)*e(14) + e(2)*e13) + e(3)*e(12) + e(4)*e(11) + e(5)*e(10) + e(6)*e(9) + e(7)*e(8)

Welche Werte können e(1) , ... , e(14) annehmen ?

0 oder 1

Angenommen, man interpretiert den obigen Term als logischen Ausdruck (* als das logische UND und + als das logische ODER). Welchen Wert (Integer-Zahl) hat dann der obige Term, wenn er FALSCH ist ?Welchen Wert (Integer-Zahl) hat dann der obige Term, wenn er WAHR ist ?

Wenn er FALSCH ist, dann muß e(1) , ... , e(14) gleich 0 sein, also hat der Term den Wert 0.Wenn er WAHR ist, dann können e(1) , ... , e(14) alle gleich 1 sein, also hat der Term einen Wert zwischen 1 und 7.Kurz: FALSCH entspricht 0WAHR entspricht ≥ 1

Page 46: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Aufgabe:Angenommen, die Funktion e(x) würde schon implementiert sein.Implementieren Sie e(1) * e(14) + ... + e(7) * e(8)unter der Bedingung, daß sich das Laufzeitverhalten verbessert.

Page 47: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

int sum=0;

for(i=0;i<14;i=i+2){ sum = e(i)*e(15-i); if (sum==1) break;}

Wenn sum das 1. Mal den Wert 1 hat, ist der Wahrheitswert W, unabhängig davon, was die nachfolgenden Produkte für Werte haben.

Page 48: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Aufgabe:Erstellen Sie die Funktion

eRek(int zahl), die berechnet, ob eine Zahl zu den

wunderbaren Zahlen gehört (oder nicht)

Page 49: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Lösung:

Page 50: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

#include "stdafx.h"int eRek(int zahl);

int main(){ int erg, i; for(i=1;i<20;i++){ erg = eRek(i); printf("%d %d\n", i,erg); } return 0;}

Page 51: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

int eRek(int zahl){ int i,erg,zahl1,zahl2; if(zahl==3 || zahl==5) // K(zahl) erg=1; else { // K(zahl) bestimmen for (i=1;i<=zahl-1;i++){ zahl1=i; zahl2=zahl-zahl1; if(zahl1!=zahl2){ // sonst erg=eRek(zahl1)*eRek(zahl2); if(erg==1) return 1; } } erg=0; // K(zahl)= } return erg;}

Page 52: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Weiteres Beispiel:Regulärer Ausdruck

Page 53: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Zuerst ein paar Definitionen

Page 54: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Alle folgenden Zeichenketten sollen aus dem Alphabet A = { a , b , c }bestehen. D.h. eine beliebige Zeichenkette darf nur aus diesen 3 Zeichen bestehen.Die Menge aller Zeichenketten, die aus dem Alphabet A hergestellt werden, bezeichnen wir mit X.

Page 55: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Wenn eine Zeichenkette über dem Alphabet A die Länge n hat, schreibt man dafür kurz:| z | = n

Beispiel:| abca | = 4

Page 56: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Beispiele von Zeichenkette über A

und keinen Zeichenketten über A

Page 57: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

cabababamit mammaaaaaahhh(a+b)abbaacbacbacbacbcbbacbac

ZK über A

Was sind Zeichenketten über dem Alphabet A, was nicht ?

ZK über A

keine ZK über A

keine ZK über A

keine ZK über A

keine ZK über A

ZK über A

ZK über A

Page 58: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Jetzt zu den regulären Ausdrücken

Page 59: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Für das Alphabet A gilt im Folgenden:

A = {a, b, c}

Page 60: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

a* bedeutet die Menge aller Zeichenketten, die aus beliebig vielen a besteht. Das Zeichen * bedeutet Wiederholung.Aus welchen Elementen besteht dann also die Menge X aller Zeichenketten der Form a* ?

Page 61: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

X = {a, aa, aaa, aaaa, ...}

Page 62: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

a | bbedeutet die Menge aller Zeichenketten, die entweder aus dem Zeichen a oder dem Zeichen b besteht.Das Zeichen | bedeutet oder.Aus welchen Elementen besteht dann also die Menge X aller Zeichenketten der Form a|b ?

Page 63: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

X = {a, b}

Page 64: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

a* | b*

Aus welchen Elementen besteht dann also die Menge X aller Zeichenketten der Form a* | b* ?

Page 65: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

X = {a, aa, aaa, ..., b, bb, bbb, ...}

Dies könnte man mengentheoretisch auch schreiben als ...

Page 66: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

X = {a, aa, aaa, ...} {b, bb, bbb, ...}

Page 67: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

a (a | b | c)*

Die Klammer bedeutet, daß der Ausdruck in der Klammer zuerst abgearbeitet wird.Aus welchen Elementen besteht dann also die Menge X aller Zeichenketten der Form a (a | b | c)* ?

Page 68: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

X = Menge aller Zeichenketten (über A), die mit dem Zeichen a beginnen.

Page 69: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

a c* a

Aus welchen Elementen besteht dann also die Menge X aller Zeichenketten der Form a a c* a ?

Page 70: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

X = Menge aller Zeichenketten (über A), die mit dem Zeichen a beginnen und enden und dazwischen nur aus beliebig vielen(auch 0) Zeichen c bestehen.Mengentheoretisch geschrieben ...

Page 71: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

X = {aa, aca, acca, accca, ...}

Page 72: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Aufgabe:Geben Sie die Regeln an, die die Zeichenketten der

Form a* erstellen.

Page 73: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

--- a

{z} ----- wobei zX=Menge aller az Zeichenketten über A

Regel 1, kurz R1

Regel 2, kurz R2

Page 74: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Aufgabe:Geben Sie die MengenD0, D1, D2, D3, ... an.

Page 75: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D0 = D1 = {a}D2 = {a, aa}D3 = {a, aa, aaa}...

Page 76: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Wie kann man rekursiv berechnen, ob eine

Zeichenkette ein regulärer Ausdruck der Form a* ist

oder nicht ?

Page 77: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Schauen wir uns dazu die Formel von vorher an:

Page 78: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

// Kandidatenmenge leer:Fall: K(x) = ==> e(x) = 0

// x kommt direkt nach dem Urknall:Fall: K(x) ==> e(x) = 1

Fall: sonste(x) = e(x1) * e(x2) {x1,x2}K(x)

Page 79: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Fall: sonste(x) = e(x1) * e(x2) {x1,x2}K(x)

Da hier K(x) nur aus einer einelementigen Menge produziert wird, gilt:e(x) = e(x1) {x1}K(x)

Page 80: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

// Kandidatenmenge leer:Fall: K(x) = ==> e(x) = 0

// x kommt direkt nach dem Urknall:Fall: K(x) ==> e(x) = 1

Fall: sonste(x) = e(x1) {x1}K(x)

Bei welchen Zeichenketten ist

dies der Fall?

Wenn die Zeichenkette ein Zeichen ist (Länge = 1) und dieses Zeichen a ist. Bei welchen Zeichenketten

ist dies der Fall?

Wenn die Zeichenkette ein Zeichen ist (Länge = 1) und dieses Zeichen a ist.

Was ist z.B. K(aaabc) ?

K(aaabc) = { aabc }d.h. K(aaabc) besteht nur aus einem Element.

Page 81: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Bevor wir die zugehörige Funktion eRek(...) implementieren, machen wir noch ein paar Überlegungen ...

Page 82: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Wie kann man die folgende Formel implementieren?

e(x) = e(x1) {x1}K(x)

Man kann den zu x gehörigen Kandidaten K(x) bestimmen und in ein Feld v eintragen.Für K(aaabc) wäre dies z.B:

aabc

Was muß dann noch berechnet werden ?

e(v)

Dies könnte analog zu den wunderbaren Zahlen implementiert werden.Dann müßte man noch ein Feld erstellen. Wenn man dies nicht will, kann man dies wie folgt machen:

Page 83: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

aaabc

aabc

↑ string

Wo beginnt diese Zeichenkette bzgl. der Zeichenkette string ?

begin+1

begin

Man übergibt der Funktion e nicht nur eine Zeichenkette string, sondern auch den Beginn dieser Zeichenkette:Für K(aaabc) wäre dies z.B:e(aaabc,begin)wobei hier begin = 0 wäre.Die Kandidatenmenge K(aaabc) wäre wieder:

Page 84: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Aufgabe:Erstellen Sie die Funktion

eRek(...) die berechnet, ob eine

Zeichenkette ein regulärer Ausdruck der Form a* ist

oder nicht.

Page 85: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

#include "stdafx.h"#include <string.h>

int e(char string[], int begin, int end);

int main(){ int erg; char string[] = "aaaaaaaab"; erg=e(string,0,strlen(string)); if(erg==1) printf("ZK ist von der Form a^*\n\n"); else printf("ZK ist nicht von der Forma^*\n\n"); return 1;}

Berechnet Länge einer Zeichenkette

Deswegen muß entsprechende Header-Datei eingefügt werden.

Page 86: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

int e(char string[], int begin, int end){ int len; int erg; len = end - begin + 1; if(len==1){ if(string[begin]=='a'){ erg=1; } else{ erg=0; } } else{ if(string[begin]=='a'){ erg=e(string, begin+1, end); return erg; } } return erg;}

Page 87: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Weiteres Beispiel:Terme

Page 88: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Alle folgenden Zeichenketten sollen aus dem Alphabet A = { a , b , ) , ( , + }bestehen. D.h. eine beliebige Zeichenkette darf nur aus diesen 5 Zeichen bestehen.Die Menge aller Zeichenketten, die aus dem Alphabet A hergestellt werden, bezeichnen wir mit X.

Page 89: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Wenn eine Zeichenkette über dem Alphabet A die Länge n hat, schreibt man dafür kurz:| z | = n

Beispiel:| baba | = 4

Page 90: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Beispiele für Zeichenketten über A:aba(b+bb(a)(a+b)++++bbba+++)aa(bbb+++a((a+a)+(b+b))

Page 91: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Unter einem mathematischen Term verstehen wir hier :

Page 92: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

1) Einfache Variablen (das sind die Zeichen a und b

2) Zeichenketten der Form: (a+b), ((a+b)+b), ((b+a)+(b+(a+b))), usw.

Bemerkung: a+b ist kein Term

Page 93: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Weitere Bemerkungen: d ist ... kein Terma ist ... ein Term(a+b ist ... kein Terma+b+c ist ... kein Term(a*b) ist ... kein Term((b+b)+(a+a)) ist ... ein Term

Page 94: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Aufgabe:Geben Sie die Regeln (Regelmenge) an, mit denen man Terme induktiv definieren kann.

Page 95: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

--- a

--- b

{z; s} ------ wobei zX und sX

(z+s)

Regel 1, kurz R1

Regel 3, kurz R3

Regel 2, kurz R2

Page 96: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Aufgabe:Geben Sie die MengenD0, D1, D2, D3 an.

Page 97: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D0 =

Page 98: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D1 = {a, b}

Page 99: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D2 = { a, b, (a+b), (b+a), (a+a), (b+b) }

Page 100: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

D3 = { a, b, (a+b), (b+a), (a+a), (b+b),(a+(a+b)), (a+(b+a)), (a+(a+a)), (a+(b+b)),(b+(a+b)), (b+(b+a)), (b+(a+a)), (b+(b+b)),((a+b)+a), ((a+b)+b), ((a+b)+(a+b)), ((a+b)+(b+a)),((a+b)+(a+a)), ((a+b)+(b+b)),((b+a)+a), ((b+a)+b), ((b+a)+(a+b)), ((b+a)+(b+a)),((b+a)+(a+a)), ((b+a)+(b+b)),((a+a)+a), ((a+a)+b), ((a+a)+(a+b)), ((a+a)+(b+a)),((a+a)+(a+a)), ((a+a)+(b+b)),((b+b)+a), ((b+b)+b), ((b+b)+(a+b)), ((b+b)+(b+a)),((b+b)+(a+a)), ((b+b)+(b+b)) }

Page 101: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Wie kann man rekursiv berechnen, ob eine

Zeichenkette ein Term ist oder nicht ?

Page 102: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Schauen wir uns dazu die Formel von vorher an:

Page 103: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Fall: K(x) = ==> e(x) = 0Fall: K(x) ==>e(x) = 1Fall: sonste(x) = e(x1) * e(x2) {x1,x2}K(x)

wobei K(x) die zu x gehörende Kandidatenmenge ist.z.B: x = (a+b+b)K(x) = ?

Page 104: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

x= (a+b+b)K(x) besteht dann aus den folgenden Elementen:{a, b+b} , {a+b,b}Diese bekommt man, indem man …

Page 105: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

x= (a+b+b)K(x) besteht dann aus den folgenden Elementen:{a, b+b} , {a+b,b}…an jedem vorkommenden + die linke und rechte (bzgl. des Zeichens + ) Teilzeichenfolge betrachtet (abzüglich der linken Klammer bzw. der rechten Klammer), also:

Page 106: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

1. Kandidatenelement von:

x= (a+b+b)

a

b+b

(a abzüglich der linken Klammer ergibt:

b+b) abzüglich der rechten Klammer ergibt:

Teilzeichenkette links des 1. + Zeichens:

Teilzeichenkette rechts des 1. + Zeichens:

also: {a, b+b}

Page 107: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Bestimmen Sie das 2. Kandidatenelement von:x= (a+b+b)

Page 108: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

2. Kandidatenelement von:

x= (a+b+b)Teilzeichenkette links des 2. + Zeichens:(a+b abzüglich der linken Klammer ergibt: a+b

Teilzeichenkette rechts des 2. + Zeichens:b) abzüglich der rechten Klammer ergibt: b also: {a+b, b}

Page 109: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Weiteres Beispiel:x= a+b+c)

K(x) = ?

Page 110: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

x= a+b+c)K(x) = Denn es gibt keine Regel mit der man x produzieren kann. Regel 2 produziert nämlich links die Klammer ( und rechts die Klammer ) und Regel 1 verlangt, daß x ein Zeichen ist.

Page 111: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Weiteres Beispiel:x ist eine aus mehreren Zeichen bestehende Zeichenkette, die am Anfang keine öffnende Klammer ( oder am Ende keine schließende Klammer ) hat.

K(x) = ?

Page 112: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

K(x) = Denn es gibt keine Regel mit der man x produzieren kann. Regel 2 produziert nämlich links die Klammer ( und rechts die Klammer ) und Regel 1 verlangt, daß x ein Zeichen ist.

Page 113: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Weiteres Beispiel:x= ae(x) = ?Warum braucht man hier nicht K(x) zu berechnen?Weil x direkt von der leeren Menge produziert wird, also K(x). Also ist

e(x) = 1

Page 114: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Weitere Beispiele:z2 mit |z2|=2, z3 mit |z3|=3 und z4 mit |z4|=4 seien Zeichenketten über dem Alphabet A (siehe oben) mit den Längen 2, 3, und 4.

K(z2) = ?K(z3) = ?K(z4) = ?

Page 115: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Weitere Beispiele:z2 mit |z2|=2, z3 mit |z3|=3 und z4 mit |z4|=4 sind Zeichenketten über dem Alphabet A (siehe oben) mit den Längen 2, 3, und 4.

K(z2) = K(z3) = K(z4) =

Page 116: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

((a+(b+a)+b)

(a , (b+a)+b (a+(b+a) , b (a+(b , a)+b0 0 0

0

10

Wie groß ist jeweils e(…), d.h. welchen Wert haben die roten Blätter ?

e(((a+(b+a)+b))=0*0+0*0+1*0*1

1

0

a , (b+a1 0

=e((a+(b+a))

0

a+(b , a

1*0+0*1

Page 117: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Bevor wir die zugehörige Funktion eRek(...) implementieren, machen wir noch ein paar Überlegungen ...

Page 118: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Wie kann man die folgende Formel implementieren?

e(x) = e(x1) * e(x2) {x1,x2}K(x)

Man kann die zu x gehörige Kandidaten K(x) bestimmen und in ein Feld v eintragen.Für K((((a+b)+c)+(a+c))) wäre dies z.B:

((a b)+c)+(a+c) ((a+b) c)+(a+c)

Was muß dann noch berechnet werden ?

e(v[0])*e(v[1]) + e(v[2])*e(v[3]) + e(v[4])*e(v[5]) + e(v[6])*e(v[7])Dies könnte analog zu den wunderbaren Zahlen implementiert werden.Doch bräuchte man dazu noch ein paar selbstgeschriebene Funktionen, wie z.B. das Splitten (aufteilen) einer Zeichenkette in eine Zeichenkette links von + und rechts von +. Da dies etwas aufwendig ist, machen wir dies wie folgt:

((a+b)+c) (a+c) ((a+b)+c)+(a c)

Feld v geht hier weiter

Page 119: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Man übergibt der Funktion e nicht nur eine Zeichenkette string, sondern auch den Beginn und das Ende dieser Zeichenkette:Für K((((a+b)+c)+(a+c))) wäre dies z.B:e((((a+b)+c)+(a+c)),begin, end)wobei hier begin = 0 und end = 16 wäre.

Die Kandidatenmenge K((((a+b)+c)+(a+c))) wäre wieder:

((a b)+c)+(a+c) ((a+b) c)+(a+c)

((a+b)+c) (a+c) ((a+b)+c)+(a c)

Diese Indizes i1 bis i4 könnte man in einer for-Schleife ermitteln.

↑ ↑ ↑ ↑Index(Stelle) i4

Index(Stelle) i3Index(Stelle) i1

Index(Stelle) i2

Mit i1 bis i4 werden die Indizes der Rechenzeichen bezeichnet.

Page 120: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

(((a+b)+c)+(a+c))

((a b)+c)+(a+c) ((a+b) c)+(a+c)

((a+b)+c) (a+c) ((a+b)+c)+(a c)

↑ ↑ ↑ ↑ i1 i2 i3 i4

string

Wo beginnen bzw. enden diese 8 Zeichenketten bzgl. der Zeichenkette

string ?

begin+1, i1-1

↑ ↑begin end

i1+1 , end-1 begin+1, i2-1 i2+1 , end-1

begin+1, i3-1

i3+1 , end-1

begin+1, i4-1 i4+1 , end-1

Page 121: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

(((a+b)+c)+(a+c))

((a b)+c)+(a+c) ((a+b) c)+(a+c)

((a+b)+c) (a+c) ((a+b)+c)+(a c)

↑ ↑ ↑ ↑ i1 i2 i3 i4

string

Wo beginnen bzw. enden diese 8 Zeichenketten bzgl. der Zeichenkette

string ?

↑ ↑begin end

Was wird in dieser Funktion nun berechnet (aufgerufen)?

sum = sum + e(string,begin+1,i-1)*e(string,i+1,end-1)

sum am Anfang 0 sein muß und i die Werte zwischen begin und end durchläuft und die Bedingung string[i]== '+' gelten muß.

wobei sum = ... und ...

Page 122: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Aufgabe:Erstellen Sie die Funktion

eRek(…), die berechnet, ob eine Zeichenkette ein Term

ist oder nicht.

Page 123: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

int eRek(char string[], int begin, int end){ int i; int len; int erg;

len = end - begin + 1; // K(zahl) if(len==1 && (string[begin]=='a' || string[begin]=='b')){ erg=1; } // gleich geht es weiter

Page 124: REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

else{ // Zerlegungen versuchen for(i=begin+1; i<end; i++){ if(len<=3) break; else{ if(string[i]=='+' && string[begin]=='(' && string[end]==')'){ // sonst erg= eRek(string, begin+1, i-1) * eRek(string, i+1, end-1); if(erg==1){ return 1; } } } } erg=0; // K(zahl)=

} return erg;}