rekursion + iteration
DESCRIPTION
REKURSION + ITERATION. 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. Produktion von wunderbaren Zahlen. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/1.jpg)
REKURSION + ITERATION
![Page 2: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/2.jpg)
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](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/3.jpg)
Produktion von wunderbaren Zahlen.
![Page 4: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/4.jpg)
Dazu werden natürlich wieder die Regeln (zur Produktion) verwendet.
Diese sind…
![Page 5: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/5.jpg)
--- 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, 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](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/6.jpg)
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](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/7.jpg)
Da es für den "Urknall" nur 2 Regeln gibt, kann man
nur R1 und R2 verwenden. Also…
![Page 8: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/8.jpg)
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](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/9.jpg)
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](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/10.jpg)
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](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/11.jpg)
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
![Page 12: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/12.jpg)
3
5 D3
8
Auf die leere Menge als Teilmenge von D3 kann man welche Regeln anwenden? Was ergibt dies für neue Elemente von D4
Regel R1 und R2. Diese ergibt 3 und 5
11 13
3 5
D4
8
11
13
Auf welche weitere Teilmengen von D3 kann man R3 anwenden?Was ergibt das für neue Elemente ?
{3,5} --> 8 {3,8} --> 11
{5,8} --> 13 {3,13} --> 1616 {5,13} --> 18
18
{8,13} --> 21
21 {11,13} --> 2424 {5,11} --> 16
16 {8,11} --> 1919
![Page 13: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/13.jpg)
3
5 D3
8
11 13
3 5
D4
8
11
13 16
18
21
16 19
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
24
![Page 14: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/14.jpg)
Uns interessiert nun, ob eine Zahl zu der Gesamtmenge D gehört oder nicht. Dazu definiert man die Funktion e (wie evaluate) mit …
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.
3 5 8
11
13 16
18
21 24
16 19
D4
![Page 15: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/15.jpg)
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 16: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/16.jpg)
Wiederholt werden aus der alten Menge die neuen Elemente berechnet und dieser Menge hinzugefügt. Dies muß hinreichend oft gemacht werden.
![Page 17: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/17.jpg)
Wie kann dies rekursiv realisiert werden …?Beachten Sie dazu folgende Informationen ...
![Page 18: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/18.jpg)
D = {3 ; 5 ; 8 ; 11; 13; ...}
3D und 5D ==> ?
Was folgt daraus, d.h. welche Zahl gehört dann auch zu D ?
![Page 19: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/19.jpg)
D = {3 ; 5 ; 8 ; 11; 13; ...} Man sieht sofort:
3D und 5D ==> 3+5D
![Page 20: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/20.jpg)
D = {3 ; 5 ; 8 ; 11; 13; ...} Allgemeiner:rD und sD ==> ?
Was folgt daraus, d.h. welche Zahl gehört dann auch zu D ?
![Page 21: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/21.jpg)
D = {3 ; 5 ; 8 ; 11; 13; ...} Allgemeiner:rD und sD ==> r+sD
![Page 22: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/22.jpg)
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 23: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/23.jpg)
D = {3 ; 5 ; 8 ; 11; 13; ...} r+sD ==> rD und sDDiese Aussage ist falsch, denn aus 8D folgt NICHT 1D und 7D
![Page 24: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/24.jpg)
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 25: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/25.jpg)
D = {3 ; 5 ; 8 ; 11; 13; ...} 8D ==> 1D und 7D falsch, aber8D ==> 3D und 5D richtig ist.
![Page 26: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/26.jpg)
8D <==> 1D 7D 2D 6D 3D 5D
d.h. in mindestens einer Zerlegung müssen alle 2 Zahlen aus D sein !
![Page 27: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/27.jpg)
8D <==> 1D 7D 2D 6D 3D 5D
bzw. wenn man die Schreibweise mit e(...) verwendet ...
![Page 28: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/28.jpg)
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 29: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/29.jpg)
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 30: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/30.jpg)
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 31: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/31.jpg)
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 32: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/32.jpg)
Die dahinter stehende Struktur kann man anschaulich durch einen sogenannten UND-ODER-Baum darstellen.Dies ist ein Baum, in dem UND-Gatter und ODER-Gatter vorkommen, also folgende Form haben:
![Page 33: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/33.jpg)
..................................... usw. .....................................................
blaue Gebilde : ODER-Gatter
rote Gebilde : UND-Gatter
![Page 34: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/34.jpg)
e(1)e(6) e(2)
e(3)
e(7)
e(1) e(5) e(2)e(4)
e(1) e(3)
e(5) e(4)
e(1) e(3)
10
0
0
00 1
00
00
0
0 1
0
0
110
0 0
jetzt wird von den grünen Blättern ausgehend nach oben hin der Baum ausgwertet.
0
![Page 35: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/35.jpg)
Dies kann man auch etwas mathematischer darstellen:
![Page 36: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/36.jpg)
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 37: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/37.jpg)
Weitere rekursive Berechnungen?
![Page 38: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/38.jpg)
e(5) = ?Wie berechnet man aber e(5) rekursiv, d.h. kann e(5) durch Verwendung von e(1), ..., e(4) berechnet werden ?
![Page 39: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/39.jpg)
Nein, denn 5wird direkt aus der leeren Menge produziert Also ist e(5) = 1
![Page 40: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/40.jpg)
e(2) = ?Wie berechnet man aber e(2) rekursiv, d.h. kann e(2) durch Verwendung von e(1) berechnet werden ?
![Page 41: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/41.jpg)
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 42: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/42.jpg)
Rekursive Berechnung von e(7) Aus welchen Elementen aus D könnte die 7 theoretisch produziert worden sein?
![Page 43: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/43.jpg)
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 44: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/44.jpg)
Insgesamt ergibt dies die folgende mathematische Formel:
![Page 45: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/45.jpg)
// 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 46: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/46.jpg)
Bevor wir die zugehörige Funktion e(...) implementieren, machen wir noch ein paar Überlegungen ...
![Page 47: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/47.jpg)
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 48: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/48.jpg)
...int sum=0;
for(i=1;i<15;i=i+2){ sum = e(i)*e(15-i)+sum;}...
![Page 49: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/49.jpg)
Annahme: Das Feld v ist sehr groß.
Wie könnte man die Laufzeit (Performance) des Programms verbessern ?
Beachten Sie dazu Folgendes:
![Page 50: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/50.jpg)
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 51: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/51.jpg)
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 52: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/52.jpg)
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 53: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/53.jpg)
Aufgabe:Erstellen Sie die Funktion
eRek(int zahl), die berechnet, ob eine Zahl zu den
wunderbaren Zahlen gehört (oder nicht)
![Page 54: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/54.jpg)
Lösung:
![Page 55: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/55.jpg)
#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 56: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/56.jpg)
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 57: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/57.jpg)
Weiteres Beispiel:Regulärer Ausdruck
![Page 58: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/58.jpg)
Zuerst ein paar Definitionen
![Page 59: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/59.jpg)
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 60: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/60.jpg)
Wenn eine Zeichenkette über dem Alphabet A die Länge n hat, schreibt man dafür kurz:| z | = n
Beispiel:| abca | = 4
![Page 61: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/61.jpg)
Beispiele von Zeichenkette über A
und keinen Zeichenketten über A
![Page 62: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/62.jpg)
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 63: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/63.jpg)
Jetzt zu den regulären Ausdrücken
![Page 64: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/64.jpg)
Für das Alphabet A gilt im Folgenden:
A = {a, b, c}
![Page 65: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/65.jpg)
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 66: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/66.jpg)
X = {a, aa, aaa, aaaa, ...}
![Page 67: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/67.jpg)
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 68: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/68.jpg)
X = {a, b}
![Page 69: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/69.jpg)
a* | b*
Aus welchen Elementen besteht dann also die Menge X aller Zeichenketten der Form a* | b* ?
![Page 70: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/70.jpg)
X = {a, aa, aaa, ..., b, bb, bbb, ...}
Dies könnte man mengentheoretisch auch schreiben als ...
![Page 71: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/71.jpg)
X = {a, aa, aaa, ...} {b, bb, bbb, ...}
![Page 72: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/72.jpg)
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 73: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/73.jpg)
X = Menge aller Zeichenketten (über A), die mit dem Zeichen a beginnen.
![Page 74: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/74.jpg)
a c* a
Aus welchen Elementen besteht dann also die Menge X aller Zeichenketten der Form a a c* a ?
![Page 75: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/75.jpg)
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 76: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/76.jpg)
X = {aa, aca, acca, accca, ...}
![Page 77: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/77.jpg)
Aufgabe:Geben Sie die Regeln an, die die Zeichenketten der
Form a* erstellen.
![Page 78: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/78.jpg)
--- a
{z} ----- wobei zX=Menge aller az Zeichenketten über A
Regel 1, kurz R1
Regel 2, kurz R2
![Page 79: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/79.jpg)
Aufgabe:Geben Sie die MengenD0, D1, D2, D3, ... an.
![Page 80: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/80.jpg)
D0 = D1 = {a}D2 = {a, aa}D3 = {a, aa, aaa}...
![Page 81: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/81.jpg)
Wie kann man rekursiv berechnen, ob eine
Zeichenkette ein regulärer Ausdruck der Form a* ist
oder nicht ?
![Page 82: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/82.jpg)
Schauen wir uns dazu die Formel von vorher an:
![Page 83: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/83.jpg)
// 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 84: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/84.jpg)
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 85: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/85.jpg)
// 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 86: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/86.jpg)
Bevor wir die zugehörige Funktion eRek(...) implementieren, machen wir noch ein paar Überlegungen ...
![Page 87: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/87.jpg)
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 88: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/88.jpg)
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 89: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/89.jpg)
Aufgabe:Erstellen Sie die Funktion
eRek(...) die berechnet, ob eine
Zeichenkette ein regulärer Ausdruck der Form a* ist
oder nicht.
![Page 90: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/90.jpg)
#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 91: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/91.jpg)
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 92: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/92.jpg)
Weiteres Beispiel:Terme
![Page 93: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/93.jpg)
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 94: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/94.jpg)
Wenn eine Zeichenkette über dem Alphabet A die Länge n hat, schreibt man dafür kurz:| z | = n
Beispiel:| baba | = 4
![Page 95: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/95.jpg)
Beispiele für Zeichenketten über A:aba(b+bb(a)(a+b)++++bbba+++)aa(bbb+++a((a+a)+(b+b))
![Page 96: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/96.jpg)
Unter einem mathematischen Term verstehen wir hier :
![Page 97: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/97.jpg)
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 98: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/98.jpg)
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 99: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/99.jpg)
Aufgabe:Geben Sie die Regeln (Regelmenge) an, mit denen man Terme induktiv definieren kann.
![Page 100: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/100.jpg)
--- a
--- b
{z; s} ------ wobei zX und sX
(z+s)
Regel 1, kurz R1
Regel 3, kurz R3
Regel 2, kurz R2
![Page 101: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/101.jpg)
Aufgabe:Geben Sie die MengenD0, D1, D2, D3 an.
![Page 102: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/102.jpg)
D0 =
![Page 103: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/103.jpg)
D1 = {a, b}
![Page 104: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/104.jpg)
D2 = { a, b, (a+b), (b+a), (a+a), (b+b) }
![Page 105: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/105.jpg)
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 106: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/106.jpg)
Wie kann man rekursiv berechnen, ob eine
Zeichenkette ein Term ist oder nicht ?
![Page 107: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/107.jpg)
Schauen wir uns dazu die Formel von vorher an:
![Page 108: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/108.jpg)
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 109: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/109.jpg)
x= (a+b+b)K(x) besteht dann aus den folgenden Elementen:{a, b+b} , {a+b,b}Diese bekommt man, indem man …
![Page 110: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/110.jpg)
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 111: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/111.jpg)
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 112: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/112.jpg)
Bestimmen Sie das 2. Kandidatenelement von:x= (a+b+b)
![Page 113: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/113.jpg)
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 114: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/114.jpg)
Weiteres Beispiel:x= a+b+c)
K(x) = ?
![Page 115: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/115.jpg)
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 116: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/116.jpg)
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 117: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/117.jpg)
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 118: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/118.jpg)
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 119: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/119.jpg)
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 120: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/120.jpg)
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 121: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/121.jpg)
((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 122: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/122.jpg)
Bevor wir die zugehörige Funktion eRek(...) implementieren, machen wir noch ein paar Überlegungen ...
![Page 123: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/123.jpg)
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 124: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/124.jpg)
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 125: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/125.jpg)
(((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 126: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/126.jpg)
(((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 127: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/127.jpg)
Aufgabe:Erstellen Sie die Funktion
eRek(…), die berechnet, ob eine Zeichenkette ein Term
ist oder nicht.
![Page 128: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/128.jpg)
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 129: REKURSION + ITERATION](https://reader036.vdokument.com/reader036/viewer/2022062301/56814e41550346895dbbb09e/html5/thumbnails/129.jpg)
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;}