• Keine Ergebnisse gefunden

Informatik für Schüler, Foliensatz 18 Rekursion

N/A
N/A
Protected

Academic year: 2021

Aktie "Informatik für Schüler, Foliensatz 18 Rekursion"

Copied!
10
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Informatik für Schüler, Foliensatz 18 Rekursion

Prof. G. Kemnitz

Institut für Informatik, Technische Universität Clausthal 26. März 2009

·

(2)

Was ist eine Rekursion

Rekursion (lat. recurrere „zurücklaufen“) bedeutet in

Mathematik, Logik und Informatik, eine Funktion durch sich selbst zu definieren.

Ein rekursives Programm ist ein Unterprogramm, das sich selbst aufruft.

zählt zu den mächtigsten und gefährlichsten Beschreibungsmitteln der Informatik

Beispiel Fakultät

n! =

( n·(n−1)! für n >1 1 sonst

Achtung: Jede Rekursion benötigt eine Abbruchbedingung, sonst Endlosprogramm

Prof. G. Kemnitz·Institut für Informatik, Technische Universität Clausthal 26. März 2009 2/10

(3)

Rekursive Berechnung der Fakultät

def fakultaet(n):

print ’berechne ’, n, ’!’

if n>1:

f=n*fakultaet(n-1) else:

f=1

print n, ’! = ’, f return f

fakultaet(5)

Welche Ausgabefolge erzeugt das Programm?

Was passiert wenn die Fallunterscheidung für die Abbruchbedingung fehlt?

·

(4)

Was passiert, wenn sich ein Programm mehrfach selbst aufruft (Bsp. Berechnung Fibonacci-Zahl)

f ib(n) =

( f ib(n−1) +f ib(n−2) für n >2 n sonst

def fib(n):

print ’berechne fib( ’, n, ’)’

if n>2:

f=fib(n-1)+fib(n-2) else:

f=n

print n, ’fib(n) = ’, f return f

fib(5)

Welche Ausgabefolge erzeugt das Programm?

Prof. G. Kemnitz·Institut für Informatik, Technische Universität Clausthal 26. März 2009 4/10

(5)

Aufgabe 18.1: Rekursive Berechnung der Fibonacci-Zahl

Bestimmen Sie für die rekusive Berechnung der Fibonacci-Zahl experimentell, wie oft die Funktion »fib(n)« insgesamt in Abhängigkeit von naufgerufen wird.

n 5 6 7 8 9 10 11 12 13 14 15 16

fib(n)

Hilfestellung: Man kann innerhalb eines Unterprogramms mit dem Schlüsselwort »global« eine globale Variable als Zähler vereinbaren:

def fib(n):

global Zaehler

Zaehler = Zaehler +1 ...

·

(6)

Der Zähler muss vor dem ersten Unterprogrammaufruf existieren.

Was bedeutet »globale Variable«?

Prof. G. Kemnitz·Institut für Informatik, Technische Universität Clausthal 26. März 2009 6/10

(7)

Aufgabe 18.2: Multiplikation rekursiv

Beschreiben Sie die Multiplikation von zwei natürlichen Zahlen rekursiv, zuerst auf dem Papier und dann als Programm. Das Unterprogramm

def mult(a, b):

...

return Produkt

soll intern nur aus Fallunterscheidungen, Additionen, Konstantenzuweisungen, einem Aufruf von sich selbst und

print-Anweisungen zur Kontrolle, ob es richtig arbeitet, bestehen.

·

(8)

Die Testausgaben zur Funktionskontrolle können wie folgt aussehen:

berechne 5*7 berechne 4*7 berechne 3*7 berechne 2*7 berechne 1*7 1*7 = 7 2*7 = 14 3*7 = 21 4*7 = 28 5*7 = 35

Was passiert, wenn die Aufrufargumente keine positiven ganzen Zahlen sind? (Null, negativ, Nachkommastellen)

Prof. G. Kemnitz·Institut für Informatik, Technische Universität Clausthal 26. März 2009 8/10

(9)

Aufgabe 18.3: Umwandlung einer rekursiven Liste in einen String

Die Eingabe sei eine Liste, deren Elemente entweder Zeichen des Zeichensatzes oder selbst Listen aus Zeichen und Listen sind, z.B.:

x1 = [’H’, ’a’, ’l’, ’l’, ’o’];

x2 = [’W’, ’e’, ’l’, ’t’];

x3 = [’g’, ’e’, ’h’, ’t’];

x4 = [x3, ’ ’, ’e’, ’s’, ’ ’, ’d’, ’i’, ’r’];

x5 = [x1, ’ ’, x2, ’,’, ’ ’,’W’, ’i’, ’e’, x4,’?’];

·

(10)

Schreiben Sie ein rekusives Programm mit einer Liste als Aufrufparameter und einem String als Rückgabewert:

def Liste2Str(l):

...

return s

das für jedes Element der Liste, wenn es ein Zeichen ist, das Zeichen an einen zum Beginn leeren String anhängt, undf wenn es eine Liste ist, sich selbst mit der Teilliste aufruft und den Ergebnisstring anhängt. Kontrollieren Sie die Abarbeitung mit geeigneten Testausgaben.

In welche Zeichenkette müsste das Programm die folgende Liste umwandeln:

a = [’p’, ’l’, ’a’, ’ ’, a];

Wie schützt sich ein Python-Programm vor rekursiven Listen?

(ausprobieren)

Prof. G. Kemnitz·Institut für Informatik, Technische Universität Clausthal 26. März 2009 10/10

Referenzen

ÄHNLICHE DOKUMENTE

Uber Adresse (Referenz) des ersten Zeichens ¨ im Speicher; Ende der Zeichenkette bestimmt durch ’ \0 ’. Adress-Operator & liefert Referenz auf ein

Der zweite Teil ist eine Wiederholschleife um den ersten Teil, in dem zusätzlich in einer Liste gezählt wird, wie oft der Probant ins Wasser gefallen ist (vergl.. Aufgabe 12.4:

wiederhole für jedes Zeichen: Zeichen anhängen Zeichenkette in die Datei schreiben. ⇒ Bei Schwierigkeiten Algorithmus zuerst in dieser Form auf

Skizzieren Sie zuerst auf einem Zettel einen Algorithmus, der eine Datei einliest, alle Umlaute mit Hilfe des Wörterbuchs ersetzt und das Ergebnis in eine Datei

vorkommt, als Schlüssel verwendet wird, dem eine Liste aller Schlüssel aus »BWB« zugeordnet wird, denen dieser Beruf zugeordnet

Zeichne eine Linie mit dem Entpunkt in der untersten Zeile 20 Spalten weiter hinten. Zeichne eine Linie mit dem Entpunkt in der untersten Zeile 20 Spalten

Außer dem Konstruktor und der String-Methode soll es für einen Helden drei weitere Methoden

Frank Hölzle/Aachen berichtete über Trans- plantate und mikrochirurgisches Vorge- hen bei der Kieferrekonstruktion: „Es ist spannend, was heute geht – und in wel- che