From 7cb9ee89a42c15843bd3b18c87ed08fd37b7caeb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Robert=20J=C3=A4schke?= <jaeschke@l3s.de>
Date: Wed, 13 Dec 2017 08:44:11 +0000
Subject: [PATCH] +Rekursion

---
 img/stapeldiagramm_fakultaet.pdf | Bin 0 -> 20534 bytes
 img/stapeldiagramm_fakultaet.svg | 368 +++++++++++++++++++++++++++++++
 notebooks/seminar06.ipynb        | 303 ++++++++++++++++++++++++-
 3 files changed, 667 insertions(+), 4 deletions(-)
 create mode 100644 img/stapeldiagramm_fakultaet.pdf
 create mode 100644 img/stapeldiagramm_fakultaet.svg

diff --git a/img/stapeldiagramm_fakultaet.pdf b/img/stapeldiagramm_fakultaet.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..620f61d0632f7ccff00d2a67051a664a1cd2b9e8
GIT binary patch
literal 20534
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
Rw!K#cYmqXYPS39|(-m(Gm=gd1

literal 0
HcmV?d00001

diff --git a/img/stapeldiagramm_fakultaet.svg b/img/stapeldiagramm_fakultaet.svg
new file mode 100644
index 0000000..af48843
--- /dev/null
+++ b/img/stapeldiagramm_fakultaet.svg
@@ -0,0 +1,368 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="106.10155mm"
+   height="46.042965mm"
+   viewBox="0 0 106.10155 46.042965"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.1 r15371"
+   sodipodi:docname="stapeldiagramm_fakultaet.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="TriangleOutM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="TriangleOutM"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4657"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Send"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Send"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4527"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleOutM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="TriangleOutM-6"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4657-6"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleOutM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="TriangleOutM-1"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4657-9"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleOutM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="TriangleOutM-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4657-8"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(0.4)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.2123811"
+     inkscape:cx="174.30497"
+     inkscape:cy="87.010327"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1009"
+     inkscape:window-x="0"
+     inkscape:window-y="34"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-20.249839,-22.111829)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="29.623943"
+       y="26.790508"
+       id="text4487"><tspan
+         sodipodi:role="line"
+         id="tspan4485"
+         x="29.623943"
+         y="26.790508"
+         style="stroke-width:0.26458332px">__main__</tspan><tspan
+         sodipodi:role="line"
+         x="29.623943"
+         y="31.023842"
+         style="stroke-width:0.26458332px"
+         id="tspan4489" /></text>
+    <text
+       id="text4495"
+       y="37.232071"
+       x="31.004736"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         id="tspan4493"
+         style="stroke-width:0.26458332px"
+         y="37.232071"
+         x="31.004736"
+         sodipodi:role="line">fakultaet</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="31.004736"
+       y="56.531811"
+       id="text4501"><tspan
+         sodipodi:role="line"
+         x="31.004736"
+         y="56.531811"
+         style="stroke-width:0.26458332px"
+         id="tspan4499">fakultaet</tspan></text>
+    <g
+       id="g4506"
+       transform="translate(-0.43764877,-0.765871)">
+      <rect
+         y="52.354485"
+         x="44.727676"
+         height="6.6522522"
+         width="74.327888"
+         id="rect4537"
+         style="opacity:0.99823531;fill:#aaccff;fill-opacity:0.60784314;stroke:#0067ff;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="48.266571"
+         y="56.955494"
+         id="text4527"><tspan
+           sodipodi:role="line"
+           x="48.266571"
+           y="56.955494"
+           style="text-align:start;text-anchor:start;stroke-width:0.26458332px"
+           id="tspan4525">n → 1  rekursion → 1  ergebnis → 1 </tspan></text>
+    </g>
+    <rect
+       y="22.244329"
+       x="44.290028"
+       height="6.6522541"
+       width="74.327888"
+       id="rect4501"
+       style="opacity:0.99823531;fill:#aaccff;fill-opacity:0.60784314;stroke:#0067ff;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <g
+       id="g4514"
+       transform="translate(-0.43764877,-10.547299)">
+      <rect
+         style="opacity:0.99823531;fill:#aaccff;fill-opacity:0.60784314;stroke:#0067ff;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         id="rect4508"
+         width="74.327888"
+         height="6.6522522"
+         x="44.727676"
+         y="52.354485" />
+      <text
+         id="text4512"
+         y="56.955494"
+         x="48.266571"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         xml:space="preserve"><tspan
+           id="tspan4510"
+           style="text-align:start;text-anchor:start;stroke-width:0.26458332px"
+           y="56.955494"
+           x="48.266571"
+           sodipodi:role="line">n → 2  rekursion → 1  ergebnis → 2 </tspan></text>
+    </g>
+    <g
+       transform="translate(-0.43764877,-20.328727)"
+       id="g4522">
+      <rect
+         y="52.354485"
+         x="44.727676"
+         height="6.6522522"
+         width="74.327888"
+         id="rect4516"
+         style="opacity:0.99823531;fill:#aaccff;fill-opacity:0.60784314;stroke:#0067ff;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="48.266571"
+         y="56.955494"
+         id="text4520"><tspan
+           sodipodi:role="line"
+           x="48.266571"
+           y="56.955494"
+           style="text-align:start;text-anchor:start;stroke-width:0.26458332px"
+           id="tspan4518">n → 3  rekursion → 2  ergebnis → 6 </tspan></text>
+    </g>
+    <g
+       id="g4530"
+       transform="translate(-0.43764877,9.0155572)">
+      <rect
+         style="opacity:0.99823531;fill:#aaccff;fill-opacity:0.60784314;stroke:#0067ff;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         id="rect4524"
+         width="74.327888"
+         height="6.6522522"
+         x="44.727676"
+         y="52.354485" />
+      <text
+         id="text4528"
+         y="56.955494"
+         x="48.266571"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         xml:space="preserve"><tspan
+           id="tspan4526"
+           style="text-align:start;text-anchor:start;stroke-width:0.26458332px"
+           y="56.955494"
+           x="48.266571"
+           sodipodi:role="line">n → 0</tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="31.004736"
+       y="46.881939"
+       id="text4534"><tspan
+         sodipodi:role="line"
+         x="31.004736"
+         y="46.881939"
+         style="stroke-width:0.26458332px"
+         id="tspan4532">fakultaet</tspan></text>
+    <text
+       id="text4538"
+       y="66.181686"
+       x="31.004736"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         id="tspan4536"
+         style="stroke-width:0.26458332px"
+         y="66.181686"
+         x="31.004736"
+         sodipodi:role="line">fakultaet</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM)"
+       d="m 118.91762,65.266588 c 4.87542,0 5.7704,-8.37145 0.71755,-8.37145"
+       id="path4510"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-6)"
+       d="m 119.1568,55.974267 c 4.87542,0 5.53122,-9.806556 0.47837,-9.806556"
+       id="path4510-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-1)"
+       d="m 119.1568,45.246841 c 4.87542,0 5.53122,-9.806556 0.47837,-9.806556"
+       id="path4510-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-4)"
+       d="m 119.1568,34.519415 c 4.87542,0 5.53122,-9.806556 0.47837,-9.806556"
+       id="path4510-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       id="text4495-8"
+       y="62.854229"
+       x="125.06536"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"
+       inkscape:transform-center-x="0.59796058"
+       inkscape:transform-center-y="-0.59796058"><tspan
+         id="tspan4493-1"
+         style="stroke-width:0.26458332px"
+         y="62.854229"
+         x="125.06536"
+         sodipodi:role="line">1</tspan></text>
+    <text
+       id="text4495-8-2"
+       y="52.93325"
+       x="125.06536"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"
+       inkscape:transform-center-x="0.59796058"
+       inkscape:transform-center-y="-0.59796058"><tspan
+         id="tspan4493-1-9"
+         style="stroke-width:0.26458332px"
+         y="52.93325"
+         x="125.06536"
+         sodipodi:role="line">1</tspan></text>
+    <text
+       id="text4495-8-7"
+       y="41.332817"
+       x="125.39848"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"
+       inkscape:transform-center-x="0.59796058"
+       inkscape:transform-center-y="-0.59796058"><tspan
+         id="tspan4493-1-5"
+         style="stroke-width:0.26458332px"
+         y="41.332817"
+         x="125.39848"
+         sodipodi:role="line">2</tspan></text>
+    <text
+       id="text4495-8-6"
+       y="31.287079"
+       x="125.36715"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:100%;font-family:arial;-inkscape-font-specification:arial;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"
+       inkscape:transform-center-x="0.59796058"
+       inkscape:transform-center-y="-0.59796058"><tspan
+         id="tspan4493-1-4"
+         style="stroke-width:0.26458332px"
+         y="31.287079"
+         x="125.36715"
+         sodipodi:role="line">6</tspan></text>
+  </g>
+</svg>
diff --git a/notebooks/seminar06.ipynb b/notebooks/seminar06.ipynb
index 6037a92..3a221e4 100644
--- a/notebooks/seminar06.ipynb
+++ b/notebooks/seminar06.ipynb
@@ -61,7 +61,7 @@
    "source": [
     "Die (meisten) Funktionen, die wir bisher geschrieben haben sind \"leer\" - sie haben keinen Rückgabewert. Präziser ausgedrückt ist ihr Rückgabewert `None` (also nichts).\n",
     "\n",
-    "In diesem Kapitel schreiben wir (endlich) ertragreiche Funktionen. Das erste Beispiel ist die Funktion `area`, die die Fläche eines Kreises für einen gegebenen Radius berechnet:"
+    "In diesem Kapitel schreiben wir (endlich) ertragreiche Funktionen. Das erste Beispiel ist die Funktion `kreisflaeche`, die die Fläche eines Kreises für einen gegebenen Radius berechnet:"
    ]
   },
   {
@@ -70,7 +70,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "def area(radius):\n",
+    "def kreisflaeche(radius):\n",
     "    a = math.pi * radius**2\n",
     "    return a"
    ]
@@ -88,7 +88,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "def area(radius):\n",
+    "def kreisflaeche(radius):\n",
     "    return math.pi * radius**2"
    ]
   },
@@ -350,7 +350,302 @@
   {
    "cell_type": "markdown",
    "metadata": {},
-   "source": []
+   "source": [
+    "### 6.3 Komposition\n",
+    "\n",
+    "Wie Sie mittlerweile wissen sollten, können wir eine Funktion innerhalb einer anderen aufrufen. Als Beispiel werden wir eine Funktion schreiben, die zwei Punkte erwartet - den Mittelpunkt eines Kreises und einen Punkt auf dem Kreisumfang - und uns daraus die Fläche des Kreises berechnet.\n",
+    "\n",
+    "Angenommen, die Koordinaten des Mittelpunktes sind in den Variablen `xc` und `yc` gespeichert und die des Punktes auf dem Kreisumfang in `xp` und `yp`. Der erste Schritt ist, den Radius des Kreises zu berechnen, der sich aus der Entfernung der beiden Punkte ergibt. Wir haben gerade eine Funktion `entfernung` geschrieben, die das erledigt: "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "radius = entfernung(xc, yc, xp, yp)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Der nächste Schritt ist, die Fläche eines Kreises mit diesem Radius zu berechnen. Das haben wir auch schon implementiert:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "ergebnis = kreisflaeche(radius)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Wenn wir diese Schritte in einer Funktion verkapseln, erhalten wir:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def kreisflaeche_2(xc, yc, xp, yp):\n",
+    "    radius = entfernung(xc, yc, xp, yp)\n",
+    "    ergebnis = kreisflaeche(radius)\n",
+    "    return ergebnis"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Die Hilfsvariablen `radius` und `ergebnis` sind hilfreich für  Entwicklung und Debugging, aber sobald das Programm funktioniert können wir es prägnanter aufschreiben durch die Komposition von Funktionsaufrufen:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def kreisflaeche_2(xc, yc, xp, yp):\n",
+    "    return kreisflaeche(entfernung(xc, yc, xp, yp))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "![Kreisfläche](https://upload.wikimedia.org/wikipedia/commons/d/d2/Circle_Area_de.svg)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### 6.4 Boolesche Funktionen\n",
+    "\n",
+    "Funkionen können Boolesche Werte zurückliefern. Das ist praktkisch, um  komplizierte Tests in einer Funktion zu verstecken. Zum Beispiel: "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def ist_teilbar(x, y):\n",
+    "    if x % y == 0:\n",
+    "        return True\n",
+    "    else:\n",
+    "        return False"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Es ist üblich, Booleschen Funktionen Namen zu geben, die wie Ja-/Nein-Fragen klingen; `ist_teilbar` gibt entweder `True` oder `False` zurück und zeigt damit an, ob `x` durch `y` teilbar ist.\n",
+    "\n",
+    "Hier ist ein Beispiel:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "ist_teilbar(6, 4)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "ist_teilbar(6, 3)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Das Ergebnis des `==`-Operators ist ein Boolescher Wert, daher können wir die Funktion kompakter aufschreiben, indem wir den Wert direkt zurückgeben:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def ist_teilbar(x, y):\n",
+    "    return x % y == 0"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Boolesche Funktionen werden oft in Verzweigungen genutzt:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "if ist_teilbar(x, 2):\n",
+    "    print('x ist eine gerade Zahl')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Es mag verlockend erscheinen, stattdessen folgendes zu schreiben:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "if ist_teilbar(x, 2) == True:\n",
+    "    print('x ist eine gerade Zahl')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Aber dieser zusätzliche Vergleich ist unnötig.\n",
+    "\n",
+    "Schreiben Sie als Übung eine Funktion `ist_zwischen(x, y, z)`, die `True` zurückgibt, wenn $x \\le y \\le z$ gilt und ansonsten `False`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# def implementieren Sie hier die Funktion"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### 6.5 Noch mehr Rekursion\n",
+    "\n",
+    "Wir haben bisher nur eine kleine Teilmenge von Python kennengelernt aber vielleicht interessiert es Sie zu wissen, dass diese Teilmenge eine *komplette* Programmiersprache darstellt. Das heißt, alles was berechnet werden kann, können wir mit den bisher erlernten Anweisungen und Funktionen ausdrücken! Jedes jemals geschriebene Programm könnten wir umschreiben, so dass es nur mit den Sprachmerkmalen auskommt, die wir bis jetzt gelernt haben (gut, wir bräuchten noch ein paar Anweisungen um Geräte wie z.B. die Maus, Festplatten, etc. zu kontrollieren).\n",
+    "\n",
+    "![Alan Turing](https://upload.wikimedia.org/wikipedia/commons/thumb/7/79/Alan_Turing_az_1930-as_%C3%A9vekben.jpg/372px-Alan_Turing_az_1930-as_%C3%A9vekben.jpg)\n",
+    "\n",
+    "Diese Behauptung zu beweisen ist eine nicht so ganz einfache Aufgabe, die zuerst von [Alan Turing](https://de.wikipedia.org/wiki/Alan_Turing) gelöst wurde. Er war einer der ersten Informatiker (einige würden argumentieren, dass er ein Mathematiker war, aber viele der ersten Informatiker begannen als Mathematiker). Dementsprechend wird dies oft als [Turing-These](https://de.wikipedia.org/wiki/Church-Turing-These) bezeichnet. \n",
+    "\n",
+    "Um einen Idee davon zu bekommen, was wir mit den Werkzeugen, die wir bisher kennengelernt haben, schon erreichen können, wollen wir einige rekursiv definierte mathematische Funktionen implementieren. Eine rekursive Definition ist ähnlich einer [zirkulären Definition](https://en.wikipedia.org/wiki/Circular_definition) (*circular definition* - leider konnte ich dafür keinen deutschen Begriff finden) in dem Sinne, dass die Definition eine Referenz auf das was definiert wird enthält. Eine richtig zirkuläre Definition ist nicht sehr nützlich:\n",
+    "\n",
+    "**vorpal:**\n",
+    "- Ein Adjektiv welches genutzt wird, um etwas zu beschreiben, was vorpal ist.\n",
+    "\n",
+    "Wenn Sie so eine Definition in einem Wörterbuch sehen, sind sie vermutlich verärgert. Andererseits, wenn wir uns die Definition der Fakultätsfunktion heraussuchen (die mit dem Symbol ! bezeichnet wird), finden wir vermutlich etwas in der Art:\n",
+    "\n",
+    "\\begin{align}\n",
+    "0! &= 1\\\\\n",
+    "n! &= n(n-1)!\n",
+    "\\end{align}\n",
+    "\n",
+    "Diese Definition sagt aus, dass die Fakultät von 0 gleich 1 ist und die Fakultät jedes anderen Wertes $n$ entspricht $n$ multipliziert mit der Fakultät von $n-1$.\n",
+    "\n",
+    "Also ist 3! gleich 3 mal 2!, was 2 mal 1! ist, was 1 mal 0! ist. Zusammengenommen ist 3! also gleich 3 mal 2 mal 1 mal 1 - also 6.\n",
+    "\n",
+    "Wenn wir etwas rekursiv definieren können, dann können wir auch eine Python-Funktion schreiben, um das ganze auszuwerten. Der erste Schritt ist, zu entscheiden, was die Parameter sein sollen. In diesem Beispiel sollte es klar sein, dass `fakultaet` eine ganze Zahl erwartet: \n",
+    "\n",
+    "```python\n",
+    "def fakultaet(n):\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Wenn das Argument 0 übergeben wird, müssen wir einfach nur 1 zurückgeben:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def fakultaet(n):\n",
+    "    if n == 0:\n",
+    "        return 1"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Ansonsten, und das ist der spannende Teil, müssen wir einen rekursiven Aufruf machen, um die Fakultät von $n-1$ zu berechnen und dann mit $n$ zu multiplizieren:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def fakultaet(n):\n",
+    "    if n == 1:\n",
+    "        return 1\n",
+    "    else:\n",
+    "        rekursion = fakultaet(n-1)\n",
+    "        ergebnis = n * rekursion\n",
+    "        return ergebnis\n",
+    "\n",
+    "fakultaet(3)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Der Kontrollfluss dieses Programms ist ähnlich dem von `countdown` in [Abschnitt 5.8](seminar05.ipynb#5.8-Rekursion). Wenn wir `fakultaet` mit dem Wert 3 aufrufen, passiert folgendes:\n",
+    "\n",
+    "Da 3 ungleich 0 ist, führen wir den zweiten Zweig aus und berechnen die Fakultät von $n-1$ ...\n",
+    "- Da 2 ungleich 0 ist, führen wir den zweiten Zweig aus und berechnen die Fakultät von $n-1$ ...\n",
+    "  - Da 1 ungleich 0 ist, führen wir den zweiten Zweig aus und berechnen die Fakultät von $n-1$ ...\n",
+    "    - Da 0 gleich 0 ist, führen wir den ersten Zweig aus und geben 1 zurück, ohne weitere rekursive Aufrufe zu tätigen.\n",
+    "    \n",
+    "    Der Rückgabewert, 1, wird mit n multipliziert, was 1 ist, und das Ergebnis zurückgegeben.\n",
+    "    \n",
+    "  Der Rückgabewert, 1, wird mit n multipliziert, was 2 ist, und das Ergebnis zurückgegeben.\n",
+    "  \n",
+    "Der Rückgabewert, 2, wird mit n multipliziert, was 3 ist, und das Ergebnis 6 wird zum Rückgabewert des Funktionsaufrufs, der den ganzen Vorgang gestartet hat.\n",
+    "\n",
+    "Die folgende Abbildung zeigt wie das Stapeldiagramm für diese Folge von Funktionsaufrufen aussieht:\n",
+    "\n",
+    "![Stapeldiagramm](http://amor.cms.hu-berlin.de/~jaeschkr/teaching/spp/stapeldiagramm_fakultaet.svg)\n",
+    "\n",
+    "Das Diagramm zeigt, wie die Rückgabewerte im Stapel weiter nach oben durchgereicht werden. In jedem Block ist der Rückgabewert der Wert von `ergebnis`, was das Produkt von `n` und `rekursion` ist.\n",
+    "\n",
+    "Im letzten Block"
+   ]
   },
   {
    "cell_type": "markdown",
-- 
GitLab