Kapitel 7: Funktionen (Teil 2): Rekursion, Namensräume, Scopes. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017
|
|
- Curt Schmidt
- vor 5 Jahren
- Abrufe
Transkript
1 Kapitel 7: Funktionen (Teil 2): Rekursion, Namensräume, Scopes Grundlagen der Programmierung 1 Holger Karl Wintersemester 2016/2017 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen u.ä Überblick Flexible Funktionsparameter und Rückgabewerte Funktionen rufen Funktionen auf Indirekte Rekursion Direkte Rekursion Funktionen und Software-Entwurf
2 7.7 Zusammenfassung Abbildungsverzeichnis 7.1 Variable x wird im globalen Scope gefunden, y referenziert den Wert von x Drei verschiedene Variablen x in drei verschiedenen Scopes Zugriff auf globales x in g; Verdeckung in f Danger, danger! Beim zweiten Aufruf von is_even wird ein weiterer Namensraum angelegt, mit neuen x und y Weitere Aufrufe von is_even und is_odd mit jeweils eigenem Namensraum Bild im Bild Rekursion: Zeichnende Hände Visualisierung der rekursiven Fakultätsberechnung Visualisierung der rekursiven Fakultätsberechnung Rückgabe der Ergebnisse Zeichenkette umkehren Türme von Hanoi: Start Türme von Hanoi: Ziel Türme von Hanoi: Zwischenstand
3 Liste von Definitionen u.ä. 3 Liste von Definitionen u.ä. 7.1 Definition (Scope von Variablen) Definition (Jeder Funktionsaufruf hat einen eigenen Namensraum)
4 4 Liste von Definitionen u.ä. 7.1 Überblick Was bisher geschah Wir haben: Ausdrücke und Anweisungen Variablen als Referenz auf Werte Kontrollstrukturen für Ablauf: if, while, for Funktionen als Zusammenfassung von Anweisungen Definition und Aufruf Dieses Kapitel Wir kehren noch einmal zu Funktionen zurück und betrachten: Aufruf durch flexible Parameter Funktionen rufen andere Funktionen (oder sich selbst) auf Funktionsdefinition innerhalb anderer Funktionen Die Regeln für Namensräume und Scopes 7.2 Flexible Funktionsparameter und Rückgabewerte Erinnerung: Parameter von print An print können Parameter flexibler übergeben werden als an selbst definierte Funktionen: Beliebige Anzahl Parameter können mit Namen versehen werden Wäre das nicht auch für eigene Funktionen praktisch? Erinnerung: Welche formale Parameter bekommen welchen Wert? Mehrere formale Parameter in Funktionsdefinition: Argumente und formale Parameter werden von links nach rechts zugeordnet: a wird zu Namen für Wert von x, b für y, c für z Sogenannte Positionsparameter (positional arguments)
5 7.2. Flexible Funktionsparameter und Rückgabewerte 5 1 def f(a, b, c): 2 # f(x, y, z) Variable Anzahl an Positionsparametern? Bisherige Syntax von def: Feste Anzahl Parameter vorgegeben Erweiterte Syntax: Beliebige Parameteranzahl erlauben Wie Funktionsrumpf die Werte zur Verfügung stellen? * Als Aufzählung! In Funktionsdefinition: einem Parameter einen Stern voranstellen * Häufig: *args als formaler Parametername (nur Konvention!) Nach Stern-Parameter darf kein normaler Parameter folgen Variable Anzahl an Positionsparametern Beispiel 1 def f(a, b, *args): 2 # a und b sind normale Parameter 3 # args ist eine Aufzählung mit ggf. weiteren Parameter 4 print("a:", a, "b:", b) 5 print("anzahl weitere Parameter:", len(args)) 6 print("weitere Parameter:", args) 7 print(" ") 8 9 # f mit zwei Parametern aufrufen: 10 f(1, 2) 11 # f mit zusätzlichen, optionalen Parametern aufrufen: 12 f(3, 4, "a") 13 f(5, 6, "b", 17, "c") 14 # das würde scheitern: 15 # f(1) Formale Parameter mit vorbelegten Werten (default) Möglicherweise haben manche formale Parameter häufig vorkommende, typische Werte (defaults) Die der Funktionsentwickler kennt Und die der Aufrufer nicht jedes Mal neu hinschreiben will Syntax für defaults: Im Funktionskopf default mit = notieren Müssen bei Aufruf nicht vorhanden sein
6 6 Liste von Definitionen u.ä. 1 def f(a, b=42): 2 """Parameter b hat default-wert 42, wenn nicht 3 explizit anders übergeben.""" 4 print("a:", a, end=", ") 5 print("b:", b) 6 7 # Aufruf ohne default-parameter 8 f(1) 9 # Parameter nach Reihenfolge 10 f(2, 3) Argument bei Aufruf benennen Formale Parameter haben Namen Möglicherweise bei Aufruf angenehmer, die Namen zu nennen, statt die Position zu wissen? Sogenannte Schlüssel/Wert-Paare (keyword arguments) Überschreiben ggf. vorhandene default-werte Syntax: Als Zuweisung bei Aufruf Beispiel: 1 def f(a, b=42): 2 print("a:", a, end=", ") 3 print("b:", b) 4 5 # Aufruf nach Position: 6 f(1, 2) 7 # Aufruf mit Nennung der Parameter: 8 f(a=3, b=4) 9 # Bei Nennung der formalen Parameter Reihenfolge unwichtig: 10 f(b=5, a=6) dict als Schlüssel-/Wert-Paare übergeben Keyword arguments: Abbildung von Namen auf Wert Das kennen wir von dict! Kann man ein dict als Folge Schlüssel-Wert-Paaren an Funktion übergeben? Syntax: Ein dict mit zwei vorangestellten Sternen wird als Folge von entsprechenden Argumenten aufgefasst
7 7.2. Flexible Funktionsparameter und Rückgabewerte 7 1 def f(a, b, c): 2 print("a:", a, end=", ") 3 print("b:", b, end=", ") 4 print("c:", c) 5 6 d = { a : 17, b : 42, c : 99} 7 # Kann das funktionieren? 8 # f(d) 9 # Besondere Aufrufssyntax: 10 f(**d) Aufruf mit f(d) Der Aufruf mit f(d) kann natürlich nicht funktionieren. Dabei würde per Reihenfolge der Parameter dem formalen Parameter a der Wert von d zugewiesen. Für die formalen Parameter b und c sind keine Argumente mehr übrig, es gibt keinen default-wert, also scheitert der Funktionsaufruf dict als Schlüssel-/Wert-Paare übergeben Fehlende Schlüssel Was passiert hier, was muss man ändern? 1 def f(a, b, c): 2 print("a:", a, end=", ") 3 print("b:", b, end=", ") 4 print("c:", c) 5 6 d = { a : 17, b : 42} 7 # Besondere Aufrufssyntax: 8 f(**d) Fehlermeldung Die Fehlermeldung ~TypeError: f() missing 1 required positional argument: c ~ weist deutlich auf das Problem hin. Es fehlt ein Wert für den benötigten Parameter c. Also Parameter mit Wert versorgen entweder bei Aufruf oder mit einem default-wert ausstatten und den Parameter damit optional machen dict als Schlüssel-/Wert-Paare übergeben Zu viele Schlüssel? 1 def f(a, b, c): 2 print("a:", a, end=", ")
8 8 Liste von Definitionen u.ä. 3 print("b:", b, end=", ") 4 print("c:", c) 5 6 d = { a : 17, b : 42, c : 99, d : 1} 7 8 # Das scheitert: 9 f(**d) Fehlermeldung ~TypeError: f() got an unexpected keyword argument d ~ auch hier ist die Fehlermeldung deutlich. Es gibt keinen formalen Parameter d, also kann der Aufruf nicht erfolgen. Das entspricht genau einem Aufruf: f(a=17, b=42, c=99, d=1) der genau so scheitern würde dict als Schlüssel-/Wert-Paare übergeben Optionale Schlüssel? Wir brauchen eine Vorkehrung, um beliebige Schlüssel/Wert-Paare aufzunehmen Ähnlich wie bei beliebigen Positionsparametern mit *args Syntax entsprechend angelehnt: In Funktionskopf, einen Parameter mit zwei Sternen versehen * Konvention: oft **kwargs (für keyword arguments) Alle überzähligen Schlüssel-/Wert-Paare werden in diesem Parameter als dict abgelegt 1 def f(a, **kwargs): 2 print("a:", a, end=", ") 3 print("kwargs:", kwargs) 4 5 d = { a : 17, b : 42, c : 99, d : 1} 6 # Besondere Aufrufssyntax: 7 f(**d) Beispiel 1 def f(a, b, *args, **kwargs): 2 if x in kwargs: 3 return args[1], kwargs[ y ] 4 else:
9 7.2. Flexible Funktionsparameter und Rückgabewerte 9 5 return str(len(args)) * kwargs[ z ] 6 7 print(f("hallo", 3, 17, "gp1", **{ y : 17, z : 5})) Zusammenfassung formale Parameter und Argumente Syntax Definitions-Syntax def f(a, b) def f(a=17) def f(*args) def f(**kwargs) Aufruf-Syntax f(x, y) f(a=5) f(*l) f(**d) Interpretation Positionsparameter Parameter mit default Parameter für überzählige Positions-Argumente (als Tuple) Parameter für überzählige benannte Argumente (als Dict) Interpretation Positionsargument Argument explizit benennen Siehe Übungsblatt Dict d ist Liste der benannten Argumente Bemerkung: Python 3 hat noch ein paar weitere Feinheiten; brauchen wir zunächst nicht Tuple als Rückgabewerte Eigentlich selbstverständlich: Tuple sind legale Rückgabewerte Damit einfache Möglichkeit, aus Funktion mehr als einen Wert zurückzugeben return Tuple Automatisches unpacking bei Funktionsaufruf 1 def mehrfache_rueckgabe(): 2 x = 10 3 y = [1, 2, 3] 4 return x, y 5 6 # Tuple entgegennehmen: 7 t = mehrfache_rueckgabe() 8 print("t:", t) 9 # Unpacking des tuples: 10 a, b = mehrfache_rueckgabe() 11 print("a:", a, "b:", b)
10 10 Liste von Definitionen u.ä. ( t:, (10, [1, 2, 3])) ( a:, 10, b:, [1, 2, 3]) 7.3 Funktionen rufen Funktionen auf Funktionen rufen Funktionen auf Bis jetzt: lediglich eine Funktion, die aufgerufen wurde Stimmt nicht ganz: Unsere Funktion hat auch schon die Funktion print aufgerufen Was passiert genau, wenn eine Funktion eine andere aufruft? Insbesondere: Welche Variablen sind sichtbar? Ausführungsmodell Das Ausführungsmodell ist ganz naheliegend Illustration Aufrufende Funktion unterbricht Ablauf bei Aufruf Aufgerufene Funktion wird ausgeführt Rückgabewert nimmt den Platz des Aufrufs in der aufrufenden Funktion ein Aufrufer macht weiter 1 def f(): 2 print("in f, vor g") 3 x = g() 4 print("in f, nach g", "x: ", x) 5 6 def g(): 7 y = 42 8 return y 9 10 f() in f, vor g ( in f, nach g, x:, 42) (PT link)
11 7.3. Funktionen rufen Funktionen auf Beispiel: Matrix ausgeben Beispiel: Zwei Funktionen, um eine Matix auszugeben 1 # eine verschachtelte Liste: 2 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] 3 # matrix wollen wir als eine 4x3 Matrix ausgeben 4 5 def print_matrix(m): 6 for zeile in m: 7 print_zeile(zeile) 8 # Neue Zeile 9 print() def print_zeile(z): 12 for c in z: 13 print(c, end=" ") print_matrix(matrix) Beobachtung: Reihenfolge Definition und Aufruf Im Programmcode steht ein Aufruf von print_zeile bevor print_zeile definiert wurde Hier offenbar unproblematisch Weil def print_matrix eine Anweisung ist, die lediglich den Namen der Funktion mit dem Programmcode verbindet Dabei wird noch nichts ausgeführt! Entscheidend ist der Zeitpunkt der Ausführung des Aufrufs! Dann muss der Funktionsname def-iniert worden sein Beobachtung: Reihenfolge Definition und Aufruf Funktionsname vor Aufruf definiert das hier scheitert: Fehlermeldung: NameError: name f is not defined 1 f() 2 3 def f(): 4 print("hallo")
12 12 Liste von Definitionen u.ä Variablen und Sichtbarkeit? Auf welche Variablen kann man in einer Funktion zugreifen? Natürlich auf die selbst zugewiesenen Andere? Sichtbarkeit Variablen außerhalb der Funktion? Beispiel 1: Variable vor Funktionsdefinition zugewiesen 1 x = 5 2 def f(): 3 y = x 4 print(y) 5 f() 5 (PT link) Beispiel 2: Variable nach Funktionsdefinition zugewiesen 1 def f(): 2 y = x 3 print(y) 4 x = 5 5 f() Offenbar sichtbar! Bei Zugriff auf x stellt f fest, dass es kein x im eigenen Scope gibt Dann beginnt Suche: gibt es ein x im Scope des aufrufenden Programmteils? Ja! Dann benutzen wird doch das x! Diese Suche findet während der Ausführung von f statt, nicht während der Definition von f Deswegen ist es hier egal, ob x vor oder nach def Definition von f belegt wird
13 7.3. Funktionen rufen Funktionen auf 13 Visualisierung Abbildung 7.1 zeigt die Situation, nachdem die Funktion f die Variable x im aufrufenden Scope gefunden hat und die eigene Variable y den Wert von x referenziert. Abbildung 7.1: Variable x wird im globalen Scope gefunden, y referenziert den Wert von x Offenbar sichtbar! Beispiel Was wird hier ausgegeben? 1 x = 3 2 def f(): 3 y = x 4 print(y) 5 x = 5 6 f() 7 x = Sichtbarkeit bei schreibendem Zugriff? Funktioniert das hier? Nur minimale Änderung zu oben! 1 x = 5 2 def f(): 3 x = x print(x) 5 f()
14 14 Liste von Definitionen u.ä Scope durch Zuweisung Zuweisung an Variable bestimmt ihren Scope Warum funktioniert das nicht? Die Fehlermeldung: UnboundLocalError: local variable x referenced before assignment gibt einen ersten Hinweis. Offenbar wird die Variable x hier als eine Variable, die lokal zur Funktion ist, aufgefasst. Die Tatsache, dass es eine globale Variable x gibt, spielt jetzt keine Rolle anders als im Beispiel oben. Offenbar liegt der Unterschied zwischen diesen beiden Beispielen daran, dass an die Variable x im zweiten Beispiel zugewiesen wird; im vorherigen Beispiel wird x lediglich gelesen. Damit haben wir einen entscheidenen Punkt erarbeitet: Der Ort einer Zuweisung an eine Variable bestimmt ihren Scope Sichtbarkeit von Variablen zwischen zwei Funktionen? Aufruf von g durch f oben hatte keine Variablen Was passiert, wenn wir das hinzufügen? 1 def f(): 2 x = 17 3 g() 4 5 def g(): 6 z = a 7 z += x 8 print(z) 9 10 a = f() Fehlermeldung In Funktion g: NameError: global name x is not defined Unterschied der beiden Fälle? Offenbar unterschiedliches Verhalten Namen innerhalb oder außerhalb einer Funktion definiert
15 7.3. Funktionen rufen Funktionen auf 15 Namen außerhalb aller Funktionen existieren in einem besonderem Scope: dem global scope Namen innerhalb einer Funktion existieren nur im Scope der Funktion Der local scope der Funktion Local scopes zweier Funktionen haben nichts miteinander zu tun! * Genauer: Die Scopes der Namensräume der Funktionen... * Gleicher Variablenname in unterschiedlichen Scopes: Unterschiedliche Variable! Disjunkte local scopes Beispiel 1 x = def f(): 4 x = 17 5 print("x in f:", x) 6 g() 7 print("x in f:", x) 8 9 def g(): 10 x = print("x in g:", x) f() ( x in f:, 17) ( x in g:, 42) ( x in f:, 17) (PT link) Visualisierung Im obigen Progerammbeispiel tauchen drei verschiedene Variablen auf, die alle x heißen. Sie existieren in drei verschiedenen Kontexten und haben daher nichts miteinander zu tun. Abbildung 7.2 illustriert die Situation, nachdem in Funktion g an x zugewiesen wurde Disjunkte local scopes Beispiel 2 Fast das gleiche Beispiel wie eben Allerdings wird in g nicht an x zugewiesen Was gibt g aus? Erklärung?
16 16 Liste von Definitionen u.ä. Abbildung 7.2: Drei verschiedene Variablen x in drei verschiedenen Scopes 1 x = def f(): 4 x = 17 5 print("x in f:", x) 6 g() 7 print("x in f:", x) 8 9 def g(): 10 print("x in g:", x) f() ( x in f:, 17) ( x in g:, 99) ( x in f:, 17) (PT link) Visualisierung In dieser Variante von g gibt es im lokalen Scope von g keine Variable x. Daher schaut die Funktion g beim Zugriff auf x nach, ob im globalen Scope ein x existiert. Das ist der Fall; also wird dieser Wert (hier: 99) benutzt. Abbildung 7.3 zeigt die Situation nach der Ausgabe des (globalen) x in g. Beachten Sie, dass in f das globale x verdeckt ist durch die Zuweisung an die lokale Variable x.
17 7.3. Funktionen rufen Funktionen auf 17 Abbildung 7.3: Zugriff auf globales x in g; Verdeckung in f Modifizierende Nutzung globaler Variablen Zuweisung erzeugt eine Variable im lokalen Scope Genauer: Im Namensraum des lokalen Scopes Was passiert, wenn eine globale Variable verändert wird? Zuweisung erzeugt lokale Variable Wie oben das hier funktioniert nicht: 1 x = 5 2 def f(): 3 x = x f() Modifikation einer globalen Variable Das hier funktioniert: 1 L = [1, 2] 2 def f(): 3 L.append(3) 4 5 f() 6 print(l) [1, 2, 3]
18 18 Liste von Definitionen u.ä. Beobachtung An L wird nicht zugewiesen, also wird das globale L benutzt Es wird nicht L verändert, sondern das referenzierte Objekt! Modifikation einer globalen Variablen Eigentlich geht das nicht! Funktionen kommunizieren Ergebnisse durch * Rückgabewerte (gut!) * Ggf. durch Veränderung globaler Objekte (zweischneidig!) Aber wenn doch nötig? Abbildung 7.4: Danger, danger! Modifikation einer globalen Variablen Eigenes Schlüsselwort: global Deklariert einen Variablen als dem globalen Scope zugehörig Extrem bedenklich!! Schwer lesbar, schlecht wartbar, unübersichtlich, fehleranfällig,... 1 x = 5 2 def f(): 3 global x 4 x = x f() 7 print(x) 6
19 7.3. Funktionen rufen Funktionen auf Die Gefahr globaler Variablen Die Modifikation globaler Variablen wird durch die Sprache bewusst erschwert Kernproblem: Programm ist nicht mehr verständlich, indem man nur den jeweiligen Ausschnitt betrachtet Beispiel: Welchen Wert hat X? 1 X = 99 2 def func1(): 3 global X 4 X = def func2(): 7 global X 8 X = func2() 11 print(x) Zusammenfassung: Scope von Variablen in Funktionen Definition 7.1 (Scope von Variablen). Der Scope einer Variablen bestimmt sich daraus, wo an diese Variable eine Zuweisung erfolgt. Variablen, an die innerhalb eines def zugewiesen wurde, sind im local scope dieser Funktion Variablen, an die außerhalb aller Funktionen zugewiesen wurde, sind im global scope Referenziert eine Variable im global scope ein Objekt, so kann das Objekt durchaus verändert werden! Auf Variablen im global scope kann von einer Funktion aus nur lesend zugegriffen werden Es sei denn, sie sind vorher durch global deklariert 7.4 Indirekte Rekursion
20 20 Liste von Definitionen u.ä Funktionen rufen sich gegenseitig auf Bisher: f hat g aufgerufen. Und würde g eine Funktion h aufrufen, so ginge das genauso Was passiert, wenn g dann wieder f aufruft? Zwei Fragen: Terminierung? Scope? Wechselseitiger Aufruf: (Inkorrektes) Beispiel 1 def f(): 2 print("f") 3 g() 4 5 def g() 6 print("g") 7 f() 8 9 f() Problem Endlos, terminiert nicht! Wechselseitiger Aufruf: Terminierung Ziel: Stelle sicher, dass die Folge von Aufrufen terminiert Idee: Ähnlich wie Terminierung von Schleifen Finde einen Ausdruck, der mit jedem Ausdruck streng monoton und diskret fällt Zeige, dass Aufrufe enden, wenn Ausdruck einen Wert erreicht (z.b. 0) Wechselseitiger Aufruf: Beispiel Was tut dieses Programm? 1 def is_even(x): 2 print("is_even checks:", x)
21 7.4. Indirekte Rekursion 21 3 if x == 0: 4 return True 5 else: 6 y = x return is_odd(y) 8 9 def is_odd(x): 10 print("is_odd checks:", x) 11 if x == 0: 12 return False 13 else: 14 y = x return is_even(y) result = is_even(5) 18 print(result) ( is_even checks:, 5) ( is_odd checks:, 4) ( is_even checks:, 3) ( is_odd checks:, 2) ( is_even checks:, 1) ( is_odd checks:, 0) False Wechselseitiger Aufruf: Scopes und Namensräume Schauen wir uns die Scopes bzw. Namensräume genauer an: Beide Funktionen is_even und is_odd haben Variablen x und y Diese x und y werden sich gegenseitig verdecken Aber was passiert mit einem x von is_even, wenn is_even erneut aufgerufen wird? Was würden Sie sinnvollerweise erwarten? Wechselseitiger Aufruf: Animation 1 def is_even(x): 2 print("is_even checks:", x) 3 if x == 0: 4 return True 5 else: 6 y = x - 1
22 22 Liste von Definitionen u.ä. 7 return is_odd(y) 8 9 def is_odd(x): 10 print("is_odd checks:", x) 11 if x == 0: 12 return False 13 else: 14 y = x return is_even(y) result = is_even(5) 18 print(result) ( is_even checks:, 5) ( is_odd checks:, 4) ( is_even checks:, 3) ( is_odd checks:, 2) ( is_even checks:, 1) ( is_odd checks:, 0) False (PT link) Animationsschritte Der erste interessante Schritt passiert in diesem Beispiel, wenn is_odd die Funktion is_even mit dem Parameter 3 aufruft. Abbildung 7.5 zeigt, dass dann für den erneuten Aufruf von is_even ein neuer Namensraum angelegt wird, mit separatem x und y. Der Scope dieser beiden neuen Variablen x und y ist aber der gleiche (die gleichen Zeilen im Programmcode!). Dieses Muster setzt sich fort (Abbildung 7.6): jeder Aufruf einer Funktion erhält einen eigenen Namensraum, der mit den Namensraum der anderen Funktionen nichts zu tun hat Zugriff auf Variablen in anderen Namensraum? Im oben Beispiel mit f und g gelang es nicht, auf eine Variable x in einem anderen Namensraum zuzugreifen Geht das hier? Kann eine Funktion is_even auf eine Variable x von sich selbst zugreifen? In einem anderen Namensraum von is_even (allerdings im gleichen Scope)? Nein!
23 7.5. Direkte Rekursion 23 Abbildung 7.5: Beim zweiten Aufruf von is_even wird ein weiterer Namensraum angelegt, mit neuen x und y * Man kann das nicht einmal hinschreiben * Welches x würde man auch meinen? Rekursion und Namensraum Definition 7.2 (Jeder Funktionsaufruf hat einen eigenen Namensraum). Jeder rekursive Funktionsaufruf hat einen eigenen Namensraum. Die Variablennamen in einem Namensraum haben nichts mit Variablennamen in einem anderen Namensraum zu tun, selbst wenn es sich um den gleichen Scope handeln sollte. 7.5 Direkte Rekursion Direkte Rekursion Sonderfall der Rekursion: Eine Funktion ruft sich selbst auf Terminierung sicherstellen! Allgemeiner: Definition nimmt auf sich selbst Bezug Rekursion in der Kunst Abbildung 7.7 illustriert Rekursion.
24 24 Liste von Definitionen u.ä. Abbildung 7.6: Weitere Aufrufe von is_even und is_odd mit jeweils eigenem Namensraum Abbildung 7.7: Bild im Bild Rekursion in der Kunst Abbildung 7.8 illustriert Rekursion Beispiel: Fakultät Definition, nicht-rekursiv Für n 1: fak(n) = Πni=1 i = 1... n
25 7.5. Direkte Rekursion 25 Abbildung 7.8: Rekursion: Zeichnende Hände Definition, rekursiv 1 n = 0 fak(n) = 1 n = 1 n fak(n 1) sonst Beispiel: Fakultät Code 1 def fak(n): 2 if n==1: 3 return 1 4 else: 5 return n*fak(n-1) 6 7 res = fak(5) 8 print(res) 120 (PT link) Visualisierung Abbildung 7.9 zeigt einen Zwischenzustand bei der rekursiven Berechnung der Fakultät. Hier haben alle rekursiven Aufrufe stattgefunden; danach beginnt die Berechnung der Ergebnisse. Den Zustand ein paar Schritte weiter zeigt Abbildung Hier wurden die Teilergebnisse von fak(1), fak(2) und fak(3) berechnet; der Aufruf von fak(3) wird gleich zurückkehren und den Wert 6 zurückgeben.
26 26 Liste von Definitionen u.ä. Abbildung 7.9: Visualisierung der rekursiven Fakultätsberechnung Abbildung 7.10: Visualisierung der rekursiven Fakultätsberechnung Rückgabe der Ergebnisse Randfälle? Was passiert hier? Notwendige Änderungen? 1 fak(0) 2 fak(-5) Fakultät: Scope und Namensraum Um das nochmals zu betonen:
27 7.5. Direkte Rekursion 27 Der Namensraum der einer der lokalen Variable n in einer Funktion fak ist bei jedem Aufruf von fak ein neuer; jeder Aufruf hat einen eigenen Namensraum Der Scope der Variable n ist bei allen Aufrufen von fak der gleiche: die Zeilen Beispiel: String umdrehen Gegeben: Zeichenkette Gesucht: Die Zeichenkette, rückwärts gelesen Rekursive Idee Die einfachen Fälle: Eine leere Zeichenkette rückwärts: die leere Zeichenkette Eine Zeichenkette der Länge 1 rückwärts: die Zeichenkette selbst Die interessanten Fälle: eine längere Kette Nimm das erste Zeichen von der Kette weg Drehe die verkürzte Kette um Hänge das erste Zeichen ans Ende der umkehrten, verkürzten Kette an Beispiel: String umdrehen Code 1 def reverse(s): 2 if len(s)<=1: 3 return s 4 else: 5 first = s[0] 6 rest = reverse(s[1:]) 7 return rest + first 8 9 print(reverse("hallo GP1")) 1PG ollah Visualisierung Hier nur kurz die Visualisierung eines Zwischenstandes, nachdem bereits die ersten Zwischenergebnisse produziert wurden (Abbildung 7.11). Vollziehen Sie dieses Beispiel bitte selbst in nach!
28 28 Liste von Definitionen u.ä. Abbildung 7.11: Zeichenkette umkehren Knapperer Code Der hier angegebenen Code ist nur zur einfacheren Visualisierung etwas weitschweifig. Das kann man knapper wie folgt aufschreiben: 1 def reverse(s): 2 if len(s)<=1: 3 return s 4 else: 5 return reverse(s[1:]) + s[0] 6 7 print(reverse("hallo GP1")) 1PG ollah Rekursion Muster Rekursion beruht auf der Berechnung einfacherer Teilprobleme Zusammensetzen der Lösung dieser Teilprobleme zur Gesamtlösung Ganz einfache Teilprobleme werden direkt gelöst Typisches Muster: 1 def rekursive_funktion(parameter): 2 if (parameter einfach genug für direkte Loesung): 3 return Funktionswert beruhend auf parameter
29 7.5. Direkte Rekursion 29 4 else: 5 Bestimme einfacherere(s) Teilproblem(e) 6 Rufe rekursive_funktion fuer Teilprobleme auf 7 Berechne Funktionswert beruhend auf Loesungen der Teilprobleme Rekursion Entwurf? Wie entwirft man rekursive Algorithmen? Suche einfache Grenzfälle: Für welche Eingaben kann man das Ergebnis direkt angeben? Suche Zerteilung: Wie kann man kompliziertere Eingaben in einfachere Eingaben zerteilen, komplexe Probleme in einfachere Teilprobleme zerlegen? Suche Zusammensetzung: Wie kann man Lösungen der Teilprobleme zur Lösung des Gesamtproblems zusammensetzen? Entwurfsbeispiel: Türme von Hanoi Auf einem Turm liegt ein Stapel Scheiben unterschiedlicher Größe Kleinere Scheiben müssen auf größeren Scheiben liegen Dieser Scheibenstapel soll auf einen anderen Turm transportiert werden Es kann immer nur eine Scheibe bewegt werden Kleinere nur auf größeren, nicht umgekehrt! Es gibt einen dritten Turm, der als Zwischenablage verwendet werden kann Türme von Hanoi Start Abbildung 7.12: Türme von Hanoi: Start Türme von Hanoi Ziel Türme von Hanoi Möglicher Zwischenstand Türme von Hanoi Fragen Also: Grenzfall?
30 30 Liste von Definitionen u.ä. Abbildung 7.13: Türme von Hanoi: Ziel Abbildung 7.14: Türme von Hanoi: Zwischenstand Zerteilung? Zusammensetzung? Türme von Hanoi Code 1 def hanoi(hoehe, von, nach, ablage): 2 if hoehe==1: 3 print("lege Scheibe von", von, "nach", nach) 4 else: 5 hanoi(hoehe-1, von, ablage, nach) 6 print("lege Scheibe von", von, "nach", nach) 7 hanoi(hoehe-1, ablage, nach, von) 8 9 hanoi(3, "start", "ziel", "ablage") ( Lege Scheibe von, start, nach, ziel ) ( Lege Scheibe von, start, nach, ablage ) ( Lege Scheibe von, ziel, nach, ablage ) ( Lege Scheibe von, start, nach, ziel ) ( Lege Scheibe von, ablage, nach, start ) ( Lege Scheibe von, ablage, nach, ziel ) ( Lege Scheibe von, start, nach, ziel ) Wie oft wird eine Scheibe bewegt? Wie könnten wir das mitzählen? Ordentliche Lösung? Unordentlich?
31 7.5. Direkte Rekursion Rekursion oder Iteration? Fakultät lässt sich natürlich auch trivial iterativ (ohne rekursive Funktionsaufrufe) implementieren Häufig: Rekursive Variante einfacher, übersichtlicher Iterative Variante schneller, komplizierter Allgemein: Rekursiv und iterativ ineinander überführbar Wann nimmt man was? Je nach Problem, Struktur, Relevanz der Lösungszeit Vgl. VL Datenstrukturen und Algorithmen Rekursion zur Definition Grundidee der Rekursion auch für Definitionen anwendbar Für Funktionen, wie oben Für Datenstrukturen: Bäume, Listen Für Programmiersprachen: * Eine Anweisung besteht aus... * Ein Ausdruck besteht aus... anderen Ausdrücken! Mehr dazu in VL Modellierung, VL DuA, und im ganzen Rest des Studiums! Rekursion: Realisierung? Jeder Aufruf einer Funktion sei es normal, durch indirekte oder direkte Rekursion hat also einen eigenen Namensraum, eigene Version des Zustands der Funktion Zustand: Werte der Parameter, der lokalen Variablen, des Rückgabewertes Konzeptionell schön, aber wie wird das realisiert? Kernidee: Ein Stapel von Frames Datenstruktur, auf der andere Daten abgelegt werden können Kann wachsen und schrumpfen Stellt Platz für die Namensräume bereit Details: VL GPS 7.6 Funktionen und Software-Entwurf
32 32 Liste von Definitionen u.ä Wie nutzt man Funktionen sinnvoll? Bis jetzt: Syntax und Semantik für Funktionen (Noch nicht vollständig) Aber wie entwirft man Programme sinnvoll? Regel für die Nutzung von Funktionen? Hier: einige erste Faustregeln Später: VL Software-Entwurf Funktionen und Coupling Eingabe mit Argumenten, Ausgabe mit return Funktionen sollten Eingaben nur durch die Argumente erhalten Resultate nur durch return Unabhängig von Werten um die Funktion herum Isolation der Funktion erhöht Wiederverwendbarkeit Globale Variablen nur wenn nicht anders möglich Globale Variablen erzeugen Abhängigkeiten und Komplexität Nur als letzter Ausweg! Funktionen und Coupling (2) Veränderbare Argumente nicht verändern Bekommt eine Funktion veränderbare Typen (Listen, Mengen, Dicts) als Argumente, so sollte sie diese typischerweise nicht verändern Nur, wenn dies der Aufrufer offensichtlich erwarten muss Klar dokumentieren, wenn dies passiert! Meist besser: Veränderte Werte mit return zurückgeben Aufrufer entscheidet, was passiert Funktionen und Kohesion Eine Funktion erledigt genau eine Aufgabe Aufgabe typischerweise in einem knappen Satz beschreibbar Wenn zu kompliziert, zu viele unterschiedliche Aspekte: Funktion in Teilfunktionen aufteilen! Funktionen und Größe Funktion sollte relativ klein sein (Anzahl Code-Zeilen)
33 7.7. Zusammenfassung 33 Faustregel: zwei Bildschirmseiten als Maximum Wenn größer: Funktion in Teilfunktionen aufteilen! 7.7 Zusammenfassung Zusammenfassung Funktionen können Parameter in flexibler Form entgegen nehmen: default-werte, variable Parameteranzahl, Aufruf mit Parameter-Namen Funktionen können beliebige Typen zurückgeben, insbesondere Tuple Nützlich um mehrere unterschiedliche Werte als Resultat zu verwenden Jeder Funktionsaufruf hat einen eigenen Namensraum, in dem Variablennamen lokal existieren Entsteht bei Funktionsaufruf, zerstört bei Funktionsende Der Scope einer Variable ist lexikalisch durch den Ort der Zuweisung an die Variable bestimmt Bei Nutzung einer Variable wird zunächst der lokale, dann der globale Scope besucht Funktionen können direkte oder indirekte Rekursion nutzen Jeweils mit eigenem Namensraum Python-Keywords: Liste bis jetzt Bis jetzt: True, False, and, or, def, return, None in if, else, pass, elif, while, for, break, continue, assert Neu: global
Kapitel 7: Funktionen (Teil 2): Rekursion, Namensräume, Scopes. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2018/2018
Kapitel 7: Funktionen (Teil 2): Rekursion, Namensräume, Scopes Grundlagen der Programmierung 1 Holger Karl Wintersemester 2018/2018 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste
MehrProgrammierkurs Python I
Programmierkurs Python I Michaela Regneri & Stefan Thater Universität des Saarlandes FR 4.7 Allgemeine Linguistik (Computerlinguistik) Winter 2010/11 Übersicht Kurze Wiederholung: while Sammeltypen (kurz
Mehrhue06 December 2, 2016
hue06 December 2, 2016 1 Abgabehinweise Beachten Sie unbedingt diese Hinweise, sonst erhalten Sie keine Punkte aus dieser Abgabe! Für Details siehe z.b. Folien der nullten Zentralübung 1.1 Namen und Matrikelnummern
MehrFunktionen (fortgeschritten)
Funktionen (fortgeschritten) Felix Döring, Felix Wittwer 24. April 2017 Python-Kurs Gliederung 1. Nutzung von Funktionen Default Parameter Aufruf mit Namen 2. Aggregatoren Positionale Aggregatoren Benannte
MehrVorlesung Skriptsprachen Duale Hochschule Stuttgart Sommersemester Dipl.-Ing. (FH) Volker Schepper
Vorlesung Skriptsprachen Duale Hochschule Stuttgart Sommersemester 2017 Dipl.-Ing. (FH) Volker Schepper 1 Kommentar Kommentare sollen/müssen unbedingt verwendet werden. Sinnvolle Kommentare verwenden.
MehrFunktionen in Python
Funktionen in Python Prof. Dr. Rüdiger Weis Beuth Hochschule für Technik Berlin 1 / 31 1 def Anweisung 2 Argumentübergabe 3 Lokale Variablen 4 Default Argumente 5 Aufruf mit Schlüsselwort 6 Variable Argumente
MehrAlgorithmen & Programmierung. Rekursive Funktionen (1)
Algorithmen & Programmierung Rekursive Funktionen (1) Berechnung der Fakultät Fakultät Die Fakultät N! einer nichtnegativen ganzen Zahl N kann folgendermaßen definiert werden: d.h. zur Berechnung werden
MehrSpeicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
MehrRekursive Funktionen (1)
Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: n i n! = i=1 für n > 0 1 für
MehrRekursive Funktionen (1)
Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: nn ii nn! = ii=1 für nn > 0
Mehrhue04 November 18, 2016
hue04 November 18, 2016 1 Abgabehinweise Beachten Sie unbedingt diese Hinweise, sonst erhalten Sie keine Punkte aus dieser Abgabe! Für Details siehe z.b. Folien der nullten Zentralübung 1.1 Namen und Matrikelnummern
Mehr1 Funktionsaufrufe. Informatik I: Einführung in die Programmierung 4. Funktionen: Aufrufe und Definitionen. Standardfunktionen: Typen-Konversion
1 Funktionsaufrufe Informatik I: Einführung in die Programmierung 4. : und en Albert-Ludwigs-Universität Freiburg Bernhard Nebel 24./28. Oktober 2014 24./28. Oktober 2014 B. Nebel Info I 3 / 31 Funktionsaufrufe
MehrJava Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017
Informatik 1 für Nebenfachstudierende Grundmodul Java Methoden Kai-Steffen Hielscher Folienversion: 1. Februar 2017 Informatik 7 Rechnernetze und Kommunikationssysteme Inhaltsübersicht Kapitel 3 - Java
MehrInformatik I: Einführung in die Programmierung
Informatik I: Einführung in die Programmierung 7. Albert-Ludwigs-Universität Freiburg Bernhard Nebel 31. Oktober 2014 1 31. Oktober 2014 B. Nebel Info I 3 / 20 Um zu, muss man zuerst einmal. Abb. in Public
MehrMethoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom
Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon
MehrC++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22
C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven
MehrKapitel 4: Funktionen, Teil 1. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1. Abbildungsverzeichnis 2
Kapitel 4: Funktionen, Teil 1 Grundlagen der Programmierung 1 Holger Karl Wintersemester 2016/2017 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen u.ä. 3 4.1 Überblick...............................
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
MehrImplementieren von Klassen
Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und
MehrWS2018/ Oktober 2018
Einführung in die Programmierung Ronja Düffel WS2018/19 05. Oktober 2018 Rückblick Datentypen bool Zahlen (int und float) string Variablen Kontrollstrukturen Verzweigungen (if...: und if...else:) Schleifen
MehrKapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1
Kapitel 2: Python: Ausdrücke und Typen Grundlagen der Programmierung 1 Holger Karl Wintersemester 2016/2017 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen u.ä. 2
Mehr1 def Anweisung. 2 Argumentübergabe. 3 Lokale Variablen. 4 Default Argumente. 5 Aufruf mit Schlüsselwort. 6 Variable Argumente. Funktionen in Python
1 def Anweisung Sommersemester 2007 2 Argumentübergabe 3 Lokale Variablen 4 Default Argumente 5 Aufruf mit Schlüsselwort 6 Variable Argumente def Anweisung Beispiel: TuNix def def funktionsname([])
MehrFunktionen in Python
October 19, 2006 1 def Anweisung 2 Argumentübergabe 3 Lokale Variablen 4 Default Argumente 5 Aufruf mit Schlüsselwort 6 Variable Argumente def Anweisung def def funktionsname([]) : [ Dokumentationsstring
MehrTag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)
Tag 5 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Methoden Deklaration
MehrGültigkeitsbereich. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2016/
Gültigkeitsbereich Funktionen Erinnerung: Python ist eine interpretierte Sprache! Funktionen müssen definiert sein, bevor sie aufgerufen werden können. T. Neckel Einführung in die wissenschaftliche Programmierung
MehrVerwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C
Übersicht Funktionen Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion Sinn von Funktionen Wiederverwendung häufig verwendeter nicht banaler Programmteile Wiederverwendung
MehrProgrammieren mit statistischer Software
Programmieren mit statistischer Software Eva Endres, M.Sc. Institut für Statistik Ludwig-Maximilians-Universität München Funktionen Definition von Funktionen I Eine Funktion hat einen Namen benötigt Argumente
Mehrhue03 November 11, 2016
hue03 November 11, 2016 Bitte tragen Sie Ihre Matrikelnummern und E-Mail-Adressen zeilenweise in die Zelle oberhalb dieser Zelle ein. Beachten Sie: Die Abgabe muss mit Ihrem Gruppenaccount erfolgen, den
MehrEinstieg in die Informatik mit Java
1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf
Mehrpue06 November 25, 2016
pue06 November 25, 2016 1 Aufgabe 1 Schreiben Sie Funktionen, die die folgenden Anforderungen erreichen. Nutzen Sie dabei jeweils entweder eine for oder eine while Schleife und begründen Ihre Wahl. Überlegen
MehrFunktionen in JavaScript
Funktionen in JavaScript Eine Funktion enthält gebündelten Code, der sich in dieser Form wiederverwenden lässt. Es können ganze Programmteile aufgenommen werden. Mithilfe von Funktionen kann man denselben
MehrFunktionen in JavaScript
Funktionen in JavaScript Eine Funktion enthält gebündelten Code, der sich in dieser Form wiederverwenden lässt. Mithilfe von Funktionen kann man denselben Code von mehreren Stellen des Programms aus aufrufen.
MehrKapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2018/2018. Inhaltsverzeichnis 1
Kapitel 2: Python: Ausdrücke und Typen Grundlagen der Programmierung 1 Holger Karl Wintersemester 2018/2018 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen u.ä. 2
MehrCS1005 Objektorientierte Programmierung
CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) Funktionen / statische Methoden - Definition - Verwendung - Ausführung Seite 1 Th Letschert Funktionen: Definition und Verwendung
MehrInformatik I. Informatik I. 4.1 Funktionsaufrufe. 4.2 Mathematische Funktionen. 4.3 Funktionsdefinitionen. 4.4 Variablengültigkeitsbereich
Informatik I 25. Oktober 2013 4. Funktionen: Aufrufe und Definitionen Informatik I 4. Funktionen: Aufrufe und Definitionen Bernhard Nebel Albert-Ludwigs-Universität Freiburg 25. Oktober 2013 4.1 Funktionsaufrufe
MehrWS2017/ Oktober 2017
Einführung in die Programmierung Ronja Düffel WS2017/18 09. Oktober 2017 Rückblick Datentypen bool Zahlen (int und float) string Variablen Kontrollstrukturen Verzweigungen (if...: und if...else:) Schleifen
MehrFHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt
Inhalt 1. Einführung 1. Beispiel: Fakultät 2. Beispiel: Zahlenfolge 3. Beispiel: Formale Sprache 4. Unterschied Iteration/Rekursion 2. Rekursive Methoden 1. Beispiel: Fakultät 2. Beispiel: "Türme
MehrFunktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen
Funktionen Funktionen erlauben, dem Programmcode hierarchisch zu strukturieren ein Hauptprogramm steuert dabei die Abfolge von Schritten, die einzelnen Schritte können durch Funktionen realisiert werden
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)
MehrProgrammieren 1 C Überblick
Programmieren 1 C Überblick 1. Einleitung 2. Graphische Darstellung von Algorithmen 3. Syntax und Semantik 4. Einstieg in C: Einfache Sprachkonstrukte und allgemeiner Programmaufbau 5. Skalare Standarddatentypen
Mehr3 Funktionsdefinitionen
3 Funktionsdefinitionen Ziel heute: Programmcode zu wiederverwendbaren Einheiten zusammenpacken und wieder verwenden! Technische Realisierung: Funktionsdefinitionen (mit Teilaspekten Parameterversorgung
MehrEinstieg in die Informatik mit Java
1 / 27 Einstieg in die Informatik mit Java Methoden / Funktionen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition
MehrFunktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden
Funktionen in Matlab Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung
MehrInformatik I. 4. Funktionen: Aufrufe und Definitionen. 25. Oktober Albert-Ludwigs-Universität Freiburg. Informatik I.
4. Funktionen: Aufrufe und en Aufrufe Albert-Ludwigs-Universität Freiburg 25. Oktober 2013 1 / 23 Aufrufe Funktionsaufrufe 2 / 23 Funktionsaufrufe Innerhalb von Programmiersprachen ist eine Funktion ein
MehrJavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.
JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung
MehrVorsemesterkurs Informatik Übungsaufgaben. Tag 4a - Python
Vorsemesterkurs Informatik Übungsaufgaben Tag 4a - Python Aufgabe 1: Listen Mache dich im Python-Interpreter mit dem Umgang mit Listen vertraut. Kapitel 2.6 im Skript (s.40) enthält nützliche Informationen.
MehrEinführung in die Programmierung II. 5. Zeiger
Einführung in die Programmierung II 5. Zeiger Thomas Huckle, Stefan Zimmer 16. 5. 2007-1- Bezüge als Objekte Bisher kennen wir als Bezüge (Lvalues) nur Variablennamen Jetzt kommt eine neue Sorte dazu,
MehrÜbungspaket 22 Rekursive Funktionsaufrufe
Übungspaket 22 Rekursive Funktionsaufrufe Übungsziele: Skript: 1. Technische Voraussetzungen für rekursive Funktionsaufrufe 2. Umsetzung mathematisch definierter Rekursionen in entsprechende C-Programme
MehrEinführung in die Programmierung Wintersemester 2017/18
Einführung in die Programmierung Wintersemester 2017/18 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Rekursion Inhalt Rekursion: Technik Rekursion
MehrEinführung in die Programmierung Wintersemester 2010/11
Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Rekursion Inhalt Rekursion: Technik Rekursion
MehrProgrammierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden
MehrPython 2. Vorlesung Computerlinguistische Techniken Alexander Koller. 28. Oktober 2014
Python 2! Vorlesung Computerlinguistische Techniken Alexander Koller! 28. Oktober 2014 Listen Sequenz von beliebigen Werten. Literale: [], [1,2,3], [ hallo, True, -5.0] Hinten an Liste anhängen: L.append(27)
MehrTermin 6: Medienprogrammierung in Python Bildverarbeitung (3)
Termin 6: Medienprogrammierung in Python Bildverarbeitung (3) Grundlagen der Informatik Wintersemester 2006/07 Prof. Bernhard Jung Übersicht Definition von Funktionen in Python Globale und lokale Namensräume
MehrKlassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt
Klassen und Objekte Klassen sind Vorlagen für Objekte. Objekte haben Attribute Konstruktoren Methoden Aus einer Klasse kann man beliebig viele Objekte herstellen. Attribute bestimmen die Eigenschaften
MehrObjektorientierte Programmierung (ZQ1u2B)
Objektorientierte Programmierung (ZQ1u2B) Woche 4 Rekursion Christopher Scho lzel Technische Hochschule Mittelhessen 4. November 2015 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte
MehrC# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services
C# - Einführung in die Programmiersprache Methoden Leibniz Universität IT Services 02.07.12 Methoden... sind Subroutinen in einer Klasse. können einen Wert an den Aufrufer zurückgeben. verändern die Eigenschaften
MehrEinführung in die Programmierung I. 5. Prozeduren. Stefan Zimmer
Einführung in die Programmierung I 5. Prozeduren Stefan Zimmer 19.11.2007 Prozedurdeklaration mit proc Eine (mächtigere) Alternative zur Funktionsdeklaration mit -> besteht aus dem Wort proc einer Sequenz
MehrEWS, WS 2016/17 Pfahler I-1
Vorlesung und Übung Universität Paderborn Wintersemester 2016/2017 Dr. Peter Pfahler Funktionen EWS, WS 2016/17 Pfahler I-1 Funktionen Funktion: Rechenvorschrift mit einem Namen und ggf. formalen Parametern,
MehrWiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung
Wiederholung Wozu? Schreiben Benutzen Rekursion?! Javakurs 2012, 3. Vorlesung maggyrz@freitagsrunde.org 5. März 2013 Wiederholung Wozu? Schreiben Benutzen Rekursion?! 1 Wiederholung 2 Wozu? 3 Schreiben
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrC.3 Funktionen und Prozeduren
C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens
MehrEinstieg in die Informatik mit Java
1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden
MehrPYTHON. 04 Funktionen II, Module
PYTHON 04 Funktionen II, Module Funktionen Funktionen enthalten Programm-Teile können später im Programm aufgerufen werden können beliebig oft aufgerufen werden (und man muss nur die Funktion aufrufen,
MehrInstitut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 2. Februar 2017 Hinweise: Klausurtermine: Programmieren I Übungsklausur Programmieren I: 13. März
Mehr6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrMethoden und Wrapperklassen
Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 06: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von
MehrC++ - Kontrollstrukturen Teil 2
C++ - Kontrollstrukturen Teil 2 Reiner Nitsch 8417 r.nitsch@fbi.h-da.de Schleife und Verzweigung kombiniert SV initialisieren while(b1) if(b2) w f V1 V2 SV Richtung Ziel verändern Wichtiger Baustein vieler
Mehr7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});
S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht
MehrThemen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen
Themen der Übung 1 Organisatorisches Methoden und Wrapperklassen 2 Methoden 3 Wrapper-Klassen CoMa-Übung IV TU Berlin 07.11.2012 Organisatorisches: Im Pool nur auf die Abgabeliste setzen, wenn ihr wirklich
MehrModul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4
Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 4 SS 2016
MehrEinführung in die Programmierung
: Inhalt Einführung in die Programmierung Wintersemester 2009/0 : Technik vs. Iteration Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund 2 Definition (einfache,
MehrJava Einführung Methoden. Kapitel 6
Java Einführung Methoden Kapitel 6 Inhalt Deklaration und Aufruf von Methoden Lokale und globale Namen (Bezeichner) Sichtbarkeit und Lebensdauer von Variablen in Methoden Überladen von Methoden 2 Methoden
MehrEinführung in die Programmierung II. 4. Funktionen
Einführung in die Programmierung II 4. Funktionen Stefan Zimmer 17. 5. 2006-1- Warum Funktionen? Idee: Programmcode, der an mehreren Stellen des Programms verwendet wird, an einer Stelle aufschreiben (Funktionsdefinition);
MehrC++ - Objektorientierte Programmierung Konstruktoren und Destruktoren
C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue
MehrInformatik für Schüler, Foliensatz 18 Rekursion
Prof. G. Kemnitz Institut für Informatik, Technische Universität Clausthal 26. März 2009 1/10 Informatik für Schüler, Foliensatz 18 Rekursion Prof. G. Kemnitz Institut für Informatik, Technische Universität
MehrAlgorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems
4. Algorithmen Motivation Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems Der Begriff Algorithmus geht auf den Gelehrten Muhammad al-chwarizmi zurück, der um
MehrInhalt Kapitel 2: Rekursion
Inhalt Kapitel 2: Rekursion 1 Beispiele und Definition 2 Partialität und Terminierung 3 Formen der Rekursion Endständige Rekursion 4 Einbettung 29 Beispiele und Definition Rekursion 30 Man kann eine Funktion
Mehr6 Speicherorganisation
6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrErste Java-Programme (Scopes und Rekursion)
Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Scopes und Rekursion) Tutorium Bioinformatik (WS 18/19) Konstantin: Konstantin.pelz@campus.lmu.de Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/
MehrSoftware Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Rekursion Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 27 Motivation Beispiel: Fibonacci-Folge
MehrPraktikum Ingenieurinformatik. Termin 4. Funktionen, numerische Integration
Praktikum Ingenieurinformatik Termin 4 Funktionen, numerische Integration 1 Praktikum Ingenieurinformatik Termin 4 1. Funktionen. Numerische Integration, Trapezverfahren 1.1. Funktionen Eine Funktion ist
MehrGrundlagen der Programmierung in C Funktionen
Der erste Mechanismus für Code-Reuse! Grundlagen der Programmierung in C Funktionen Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Ältester Mechanismus für Code-Reuse:
Mehrpue13 January 28, 2017
pue13 January 28, 2017 1 Aufgabe 1 (Klammern und Anweisungsblöcke) Wie Sie in der Vorlesung gelernt haben, werden Anweisungsblöcke in Java nicht durch Einrückung, sondern mithilfe von geschweiften Klammern
MehrKapitel 15: Von dynamischen zu statischen Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1
Kapitel 15: Von dynamischen zu statischen Typen Grundlagen der Programmierung 1 Holger Karl Wintersemester 2016/2017 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen
MehrAlgorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems
4. Algorithmen Motivation Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems Der Begriff Algorithmus geht auf den Gelehrten Muhammad al-chwarizmi zurück, der um
MehrÜbung zur Vorlesung EidP (WS 2018/19) Blatt 4
Lutz Oettershagen Jurij Kuzmic Dortmund, den 8. November 2018 Übung zur Vorlesung EidP (WS 2018/19) Blatt 4 Block gelb Es können 4 Punkte erreicht werden. Abgabedatum: 15. November 2018, 2:59 Uhr Hinweise
MehrKapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration
Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Inhalt Rekursion: Technik Prof. Dr. Günter Rudolph Fakultät
MehrC++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16
C++ Teil 5 Sven Groß IGPM, RWTH Aachen 12. Nov 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 12. Nov 2014 1 / 16 Themen der letzten Vorlesung Eingabestrom, Verhalten von cin Namensräume Live Programming
Mehr12 Abstrakte Klassen, finale Klassen und Interfaces
12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
MehrKontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht
Kontrollanweisungen Kontrollfluss o bisher linear (von oben nach unten) o Für interessante Programme braucht man Verzweigungen und Sprünge Kontrollfluss o bisher linear (von oben nach unten) o Für interessante
MehrInstitut fu r Informatik
Technische Universita t Mu nchen Institut fu r Informatik Lehrstuhl fu r Bioinformatik Einfu hrung in die Programmierung fu r Bioinformatiker Prof. B. Rost, L. Richter WS 2013/14 Aufgabenblatt 5 2. Dezember
Mehr