Informatik I Für eine feste Zahl. Informatik I Benutzereingaben Eine Funktion factorial Iteration von unten. 18.

Ähnliche Dokumente
Programmierung in Python

Entwurf von Algorithmen - Kontrollstrukturen

Lua Grundlagen Einführung in die Lua Programmiersprache

Erwin Grüner

Algorithmen und Programmieren II Einführung in Python

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Proseminar Funktionales Programmieren. Stephan Kreutzer

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Übersicht Programmablaufsteuerung

Python Programmieren. Variablen, Ausdrücke und Anweisungen

Bitte wenden. Name: KURSARBEIT NR. 4 (10 DIFF GA) Seite 1

Einführung in Python Übung 1

Steht in der ersten Zeile #!/usr/bin/python und hat man die Ausführungsrechte gesetzt kann man es direkt ausführen.

Beispiel 19. December 4, 2009

Steuern des GSR-Interface mit QBasic

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Linux Tutorium. 12. Shellprogrammierung. Version vom :38:56

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

Programmierkurs Java

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Ruby. Programmieren mit Zucker. Thomas Kühn

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Scala kann auch faul sein

P r o g r a m m a b l a u f s t e u e r u n g

Linux Prinzipien und Programmierung

Einführung in die C-Programmierung

28. April Python ist eine Interpreter Sprache. einfach durch eigene C Module erweiterbar. Daten werden dynamisch getypt

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Hans-Georg Eßer Betriebssysteme, WS 2006/07. Fachbereich Informatik/Mathematik Übungsblatt 1, Seite 1/5 Fachhochschule München

Einführung in die Computerlinguistik Einführung in Python (1)

Primitive Datentypen

II.1.1. Erste Schritte - 1 -

Softwareentwicklung 1. Übungsaufgabe 4 Kontrollstrukturen

Einführung in die Java- Programmierung

Kontrollstrukturen - Universität Köln

Einführung in die Java- Programmierung

Programmiervorkurs WS 2012/2013. Schleifen und Methoden

Grundlagen von Python

Skriptsprachen am Beispiel Python

MATHEMATIK PROGRAMMIEREN MIT PYTHON

Modellierung und Programmierung 1

Studentische Lösung zum Übungsblatt Nr. 7

Python Einführung in die prozedurale Programmierung. Monty Python's Flying Circus

Einführung in die Programmierung

12. ArcView-Anwendertreffen Workshop Programmierung in ArcGIS. Daniel Fuchs. Wo kann eigene Programmierung in ArcGIS verwendet werden?

Einstieg ins Programmieren mit Python

Excel Funktionen durch eigene Funktionen erweitern.

E-PRIME TUTORIUM Die Programmiersprache BASIC

Übungen Programmieren 1 Felix Rohrer. Übungen

Institut fu r Informatik

Scala & Lift. Ferenc Lajko

Übungsblatt 2. Abgabe: Freitag, 7. November 2014, 18:00 Uhr

Der Lua Skripteditor Lua in der Messtechnik

Grundlagen der Informatik 2

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Frankfurt am Main. Dortmund. Stuttgart. Düsseldorf

Schritt 1. Schritt 1. Schritt 3. - Analysieren des Problems und Spezifizierung einer Lösung.

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Kompetent objektorientiert programmieren

C/C++ Programmierung

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Erwin Grüner

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Kapitel 5: Applikative Programmierung

Sprachbeschreibung und Erweiterung

Eine Einführung in C-Funktionen

PHP 5.4 ISBN Stephan Heller, Andreas Dittfurth 1. Ausgabe, September Grundlagen zur Erstellung dynamischer Webseiten GPHP54

Grundlagen von C. Ausarbeitung von Jonas Gresens

SOI Die Schweizer Informatikolympiade

Einführung in Python (1)

Prozedurale Datenbank- Anwendungsprogrammierung

Informatik I. Informatik I. 6.1 Programme. 6.2 Programme schreiben. 6.3 Programme starten. 6.4 Programme entwickeln. 6.1 Programme.

Funktionale Programmierung

Programmierkurs Python I

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Computergrundlagen Programmieren in C

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Informatik Programmiersprachen eine kurze Übersicht

SAGE-Crashkurs SoSe 2009

Teil 2 - Softwaretechnik. Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2. Übersicht. Softwaretechnik

Einführung in Python. Gliederung

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Übung 9 - Lösungsvorschlag

Kontrollstrukturen, Strukturierte Programmierung

Fallunterscheidung: if-statement

Funktionales Programmieren in Python

1. Übung zu "Numerik partieller Differentialgleichungen"

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Test-Driven Design: Ein einfaches Beispiel

Assertions (Zusicherungen)

Shell-Programmierung

Was unterscheidet Microcontroller von einem PC ( Laptop ) oder einem Handy

Transkript:

Informatik I 25. Januar 2011 18. Schleifen und Iteration Informatik I 18. Schleifen und Iteration Jan-Georg Smaus Albert-Ludwigs-Universität Freiburg 25. Januar 2011 18.1 Für eine feste Zahl 18.2 Benutzereingaben 18.3 Eine Funktion factorial 18.4 Iteration von unten 18.5 Endrekursion 18.6 for-schleifen 18.7 Zusammenfassung Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 1 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 2 / 43 Schleifen und Iteration Schleifen und Iteration II Wir haben sowohl in Scheme als auch in Python schon einige rekursive Prozeduren bzw. Methoden/Funktionen gesehen. In Scheme haben wir insbesondere endrekursive Prozeduren betrachtet; diese haben konstanten Platzverbrauch... => (it-factorial-1 15 1) => (it-factorial-1 14 15) => (it-factorial-1 13 210) => (it-factorial-1 12 2730) => (it-factorial-1 11 32760) => (it-factorial-1 10 360360) => (it-factorial-1 9 3603600) => (it-factorial-1 8 32432400) => (it-factorial-1 7 259459200) => (it-factorial-1 6 1816214400) => (it-factorial-1 5 10897286400) => (it-factorial-1 4 54486432000) => (it-factorial-1 3 217945728000) => (it-factorial-1 2 653837184000) => (it-factorial-1 1 1307674368000) => (it-factorial-1 0 1307674368000) => 1307674368000 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 2 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 3 / 43

Schleifen und Iteration III while-schleifen Wir haben endrekursive Funktionen auch als iterativ bezeichnet. Doch wie damals angekündigt, werden wir den Begriff iterativ nun etwas anders definieren/charakterisieren. Eine Schleife ist in der imperativen Programmierung ein Block, also eine Folge von Anweisungen, der mehrmals ausgeführt wird. Wie oft, hängt von Bedingungen ab. Es gibt die allgemeinste Form, die while-schleife, und eine speziellere Form, die for-schleife. Insbesondere in Python kommt die for-schleife in der Praxis häufiger vor, doch die while-schleife ist grundlegender und soll deshalb hier zuerst betrachtet werden. Unser Beispiel in diesem Kapitel ist die Fakultätsfunktion. Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 4 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 5 / 43 18.1 Für eine feste Zahl Für feste Zahl Ein Beispiel Für feste Zahl mystery.py i = 10 print(result) Was berechnet dieses Programm? Die Fakultät von 10. Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 6 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 7 / 43

Für feste Zahl Für feste Zahl Programmablauf Ein allgemeines Programm i = 10 print(result) i = 109876543210 result = 1109072050403024015120060480018144003628800 Das kleine Beispielprogramm diente dazu, Schleifen vorzustellen. Allerdings erfüllt es nicht die Anforderung der Generalität: es sollte die Fakultät einer beliebigen Zahl berechnen. Das können wir auf zwei Arten erreichen (die erste Art wird nochmal zwei Untervarianten haben)... Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 8 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 9 / 43 18.2 Benutzereingaben Erste Art: Benutzereingaben Eine weitere Schleife Shellaufrufe Bei imperativen Programmen spielt Zeit eine große Rolle: Programmzeilen sind Befehle, die nacheinander ausgeführt werden. Diese Sichtweise unterscheidet sich von der funktionalen: dort gibt es eine Eingabe und die gesamte Ausführung eines Programms besteht aus der Auswertung einer Prozedur für diese Eingabe. Deshalb ist es ganz natürlich, dass das Programm im Laufe der Zeit den Benutzer immer wieder mal nach einer Eingabe fragt und eine Variable auf den Wert dieser Eingabe setzt. Wir haben allerdings auch in der imperativen/objektorientierten Programmierung Funktionen/Methoden, d.h. wir nehmen häufig auch die funktionale Sichtweise ein. Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 10 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 11 / 43

Fakultätsprogramm mit Benutzereingabe i = int(n) Die Funktion input druckt ihr Argument aus und wartet dann eine Benutzereingabe ab. Sobald diese erfolgt ist (beendet durch die Eingabetaste), wird die Benutzereingabe als String zurückgegeben, also hier an n zugewiesen. Verwendung des Programms Python-Interpreter >>> from factorial import * Gib eine Zahl ein: 4 Fakultaet von 4 ist 24 >>> from factorial import * >>> Das Programm kann im Python-Interpreter gestartet werden, allerdings ist das nicht sehr praktisch: nach einmaligem Ablauf müssten wir das Programm erneut laden, aber das tut der Interpreter normalerweise nicht; wir müssten also erst den Interpreter beenden und ihn dann nochmal neu starten. Hier wiederum zwei Lösungen... Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 12 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 13 / 43 Eine weitere Schleife Eine weitere Schleife Eine weitere Schleife Verwendung des Programms mit zusätzlicher Schleife n = 1 while n >= 0: n = int(n) i = n if n >= 0: Python-Interpreter >>> from factorial import * Gib eine Zahl ein: 2 Fakultaet von 2 ist 2 Gib eine Zahl ein: 7 Fakultaet von 7 ist 5040 Gib eine Zahl ein: 10 Fakultaet von 10 ist 3628800 Gib eine Zahl ein: -1 >>> Warum ist die Umwandlung von n in ein int nötig? Wegen des Vergleichs n >= 0 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 14 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 15 / 43

Unnötige/schädliche Berechnungen Unnötige Ausführungen in Wir haben das Programm so konzipiert, dass die Eingabe einer negativen Zahl das Signal zum Abbrechen der Schleife ist. Allerdings wird in diesem Fall einiger Code noch ausgeführt, der unnötig ist und im Allgemeinen sogar schädlich sein könnte... n = 1 while n >= 0: n = int(n) i = n if n >= 0: Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 16 / 43 Die roten Zeilen werden unnötigerweise noch ausgeführt. Zum Glück richten sie in diesem Fall keinen Schaden an, aber auch Jan-Georgnur Smaus wegen (Universität der Freiburg) letzten if-abfrage. Informatik I 25. Januar 2011 17 / 43 Unnötige/schädliche Berechnungen vermeiden Fakultät mit break und continue Im Allgemeinen könnte durch die Ausführung von solchen Zeilen ein Schaden entstehen, etwa die Ausgabe Fakultaet von -5 ist 1 oder, viel schlimmer, Nichtterminierung. Es gibt zwei Konstrukte, um dies zu vermeiden: break und continue. Wir wollen unser Programm so konzipieren: Eingabe -1 soll zum Abbruch führen, jede andere negative Zahl soll als Versehen interpretiert werden und es soll zur Eingabe einer neuen Zahl aufgefordert werden. n = 1 while n >= 0: n = int(n) if n == -1: break if n < -1: n = 0 continue print("jetzt gehts los.") i = n print("ende") Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 18 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 19 / 43

Verwendung des Programms Python-Interpreter >>> from factorial break import * Gib eine Zahl ein: 6 Jetzt gehts los. Fakultaet von 6 ist 720 Gib eine Zahl ein: 7 Jetzt gehts los. Fakultaet von 7 ist 5040 Gib eine Zahl ein: -2 Gib eine Zahl ein: 4 Jetzt gehts los. Fakultaet von 4 ist 24 Gib eine Zahl ein: -1 Ende >>> Vereinfachtes Programm while True: n = int(n) if n == -1: break if n < -1: continue print("jetzt gehts los.") i = n print("ende") Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 20 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 21 / 43 Shellaufrufe Shellaufrufe Programme in der Shell starten In der Shell Anstatt eine zweite Schleife zu schreiben, könnten wir auch das Programm statt im Interpreter in der Shell aufrufen (wie wir schon gesehen haben). Hier nochmal das alte Programm: i = int(n) Shell # python3 factorial shell.py Gib eine Zahl ein: 5 Fakultaet von 5 ist 120 # python3 factorial shell.py Gib eine Zahl ein: 10 Fakultaet von 10 ist 3628800 Wenn wir Programme für das richtige Leben schreiben, werden diese häufig aus einer Shell aufgerufen. Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 22 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 23 / 43

Eine Funktion factorial 18.3 Eine Funktion factorial Eine Funktion factorial Zweite Art: Eine Funktion factorial Anstatt eine Benutzereingabe zu verwenden, können wir auch eine Funktion schreiben, die sich bequem im Interpreter aufrufen lässt: def factorial(n): i = n return result Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 24 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 25 / 43 Eine Funktion factorial Verwendung der Funktion factorial 18.4 Iteration von unten Iteration von unten Python-Interpreter >>> from factorial import * >>> factorial(10) 3628800 >>> factorial(4) 24 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 26 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 27 / 43

Iteration von unten Endrekursion Iteration von unten 18.5 Endrekursion In den bisherigen Varianten des Fakultätsprogramms wurde die Variable i von n bis 1 heruntergezählt. Man kann sie auch von 1 bis n heraufzählen: def factorial(n): i = 1 while i <= n: i += 1 return result Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 28 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 29 / 43 Iteration vs. Rekursion Endrekursion Endrekursion in Python Endrekursion Programme (Funktionen... ), die Schleifen statt Rekursion benutzen, bezeichnet mal als iterativ. Rekursion: um eine Funktion für ein Argument x zu berechnen, tu so, als wäre das Resultat für den Vorgänger von x schon berechnet und berechne aus diesem Resultat das Endresultat ( vom Großen ins Kleine ). Iteration: Berechne ausdrücklich erst kleine Ergebnisse und dann immer größere. In der imperativen Programmierung sind sowohl iterative als auch rekursive Berechnungen üblich. Iteration ist häufig effizienter, aber Rekursion ist häufig wesentlich natürlicher und übersichtlicher. Das größte Problem bei rekursiven Funktionen ist der hohe Speicherbedarf, weil i.a. jeder Aufruf wieder neue Variablen anlegt. Dies ist nicht der Fall für endrekursive Funktionen. Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 30 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 31 / 43

Endrekursion Rekursive Fakultätsfunktion in Python Hier ist die Definition einer rekursiven Fakultätsfunktion: def factorial(n): if n <= 1: return 1 else: intermediate = factorial(n-1) result = n * intermediate return result Die Definition ist ein wenig umständlich, damit man deutlicher erkennt, dass die Funktion nicht endrekursiv ist: nach dem rekursiven Aufruf folgen noch zwei weitere Zeilen. Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 32 / 43 Endrekursion Endrekursive Fakultätsfunktion in Python Hier ist die Definition einer endrekursiven Fakultätsfunktion: def factorial(n): return factorial_aux(n, 1) def factorial_aux(n, acc): if n == 0: return acc else: n1 = n - 1 acc1 = acc * n return factorial_aux(n1, acc1) Die Definition ist ebenso umständlich, aber man sieht deutlich, dass die Funktion endrekursiv ist: nach dem rekursiven Aufruf folgt nichts mehr! Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 33 / 43 Endrekursion Endrekursion in der imperativen Programmierung 18.6 for-schleifen for-schleifen In der imperativen Programmierung gibt es eine besonders klare Definition von Endrekursion: Eine rekursive Funktion ist endrekursiv, wenn das letzte, was die Funktion tut, ist, sich selbst rekursiv aufzurufen. In der imperativen Programmierung würde man wohl nicht sagen (wie wir es für Scheme taten): ein endrekursives Programm ist iterativ, sondern vielleicht eher: ein endrekursives Programm ahmt eine iterative Berechnung nach. Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 34 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 35 / 43

for-schleifen for-schleifen for-schleifen Fakultätsprogramm mit for-schleife Neben while-schleifen gibt es in imperativen Programmiersprachen normalerweise auch noch die so genannten for-schleifen. Diese gestatten es, eine Variable von 0 bis zu einem bestimmten Wert heraufzuzählen. def factorial_for(n): for i in range(n): +1 return result range(n) ist ein so genanntes Bereichsobjekt; es stellt die Sequenz der n Zahlen von 0 bis n-1 dar. Die Schleife, genauer ihr einzeiliger Rumpf, wird n mal durchlaufen, wobei i nacheinander die Werte 0, 1,..., n-1 hat. Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 36 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 37 / 43 Syntaktischer Zucker for-schleifen for-schleifen Bemerkungen zu for-schleifen for-schleifen sind syntaktischer Zucker. Die for-schleife for-schleife for i in range(n): Rumpf kann ersetzt werden durch: while-schleife i = 0 while i < n: Rumpf i += 1 Insbesondere in Python kommt die for-schleife in der Praxis häufiger vor als die while-schleife. Insbesondere in Python sind for-schleifen viel allgemeiner als hier präsentiert: Man braucht nicht bei 0 zu beginnen. Man kann die Schrittweite bestimmen, insbesondere auch herunterzählen. Man kann nicht nur durch einen Zahlenbereich hindurchzählen, sondern auch z.b. durch eine verlinkte Liste (sofern wir die dortige Implementierung noch erweitern), d.h., eine Variable nacheinander den Wert der Listenelemente annehmen lassen. Diese Verallgemeinerungen werden wir noch sehen. Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 38 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 39 / 43

Zusammen- fassung Zusammen- fassung 18.7 Zusammenfassung Keine Klassen Ob es wohl jemandem auffiel? In diesem Kapitel haben wir nicht über Klassen oder Objekte gesprochen. Schleifen bzw. Iteration sind typische Merkmale für imperative Programmierung. Zwar verwenden auch objektorientierte Programme Schleifen, aber das hat nichts mit der Objektorientierung zu tun. Daher in diesem Kapitel: keine Objekte! Wir sehen wieder einmal: Objektorientiert und imperativ ist kein strikter Gegensatz! Demnächst wollen wir aber auch für unsere objektorientierten Programme (verlinkte Listen) manche Methoden iterativ machen. Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 40 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 41 / 43 Zusammenfassung Zusammen- fassung Zusammenfassung II Zusammen- fassung Schleifen sind ein wichtiges Konstrukt der imperativen Programmierung. Eine while-schleife ist ein Block, der so oft ausgeführt wird, bis eine gegebene Bedingung verletzt ist. Imperative Programe müssen nicht unbedingt Funktionen enthalten. Man kann ein Programm auch so betrachten, dass die Zeilen darin nacheinander ausgeführt werden und dass man sich für die Bildschirmeingabe und -ausgabe interessiert. Als Beispiel haben wir die Fakultät betrachtet. Um diese zu berechnen, muss in einer Schleife ein Index herauf- oder heruntergezählt werden. Endrekursion heißt: als letztes ruft eine Funktion sich selbst auf. for-schleifen sind syntaktischer Zucker für das Heraufzählen einer Variable. Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 42 / 43 Jan-Georg Smaus (Universität Freiburg) Informatik I 25. Januar 2011 43 / 43