Rekursionen Erstellt von J. Rudolf im November 2001 /
Themengebiete 1.Was ist eine Rekursion? 2.Lineare Rekursion: Beispiel 3.Struktur einer lin. Rekursion 4.Übung 5.Lösung zu einer Übung
1. Was ist eine Rekursion? Eine Funktion kann nicht nur eine andere Funktion aufrufen sondern auch sich selbst. Dabei wird eine Abbruchbedingung benötigt (um einen Endlos-Aufruf zu verhindern, bei dem der Stack überläuft und zu einer Fehlermeldung führt) ist ein sehr komfortables Programmierkonzept!!!!! Bei einer lineare Rekursion: einfacher Selbstaufruf Es gibt auch zwei oder mehrfachen Selbstaufruf
2. Lin. Rekursion: Beispiel Rekursive Definition der Fakultätsfunktion n! = n * (n-1)! und 1!=1 function fac(n:integer):integer; Begin If n=1 Then result:=1 else result:= n*fac(n-1); end; Mit dem Aufruf fac(3) wird so gerechnet: fac(3)=3 * fac(2) -> 2 * fac(1) -> 1 fac(3) ruft fac(2) auf, dieses fac(1) Nun Abbruch (da n=1): also fac(1)=1 Nun wird alles rückwärts multipliziert: fac(3) = 3 * 2 * 1 = 6
3. Struktur einer lin. Rekursion Procedure rekursiv; Begin If Then //Rekursionsanfang Else Begin ; //während des Abstiegs rekursiv; //Selbstaufruf ; //während des Aufstiegs End;{else} End;{Procedure}
4. Übungen a)Rekursive Berechnung der Summe der ersten n ungeraden Zahlen ( (2n-1) ) b)Ein wort soll umgedreht werden: trow. c)Eine Zeichenfolge soll als Palindrom (z.B. anna) erkannt werden.
5. Lösung zu Übung (b) Procedure wort(Var str:String); Var hilf1,hilf2:string; Begin If length(str)<2 Then // Abbruchbedingung Else begin hilf1:=copy(str,1,1);hilf2:=copy(str,length(str),1); str:=copy(str,2,length(str)-2); wort(str); str:=hilf2+str+hilf1; End;{if} End; procedure TForm1.Button1Click(Sender: TObject); Var drehen:String; begin drehen:=Edit1.text; wort(drehen); edit1.text:=drehen; end;
Quellenangabe Baumann, Rüdeger: Informatik für die Sekundarstufe 2. Klett