{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "0609fa9a-6337-43c0-a8d2-f947558066ac", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[Module: null prototype] { }" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import { assertEquals } from \"jsr:@std/assert\"\n", "import \"https://git.amgdhg.de/kg/tslib/raw/branch/main/logger.ts\"" ] }, { "cell_type": "markdown", "id": "e2253715-005d-4a31-b577-4ba32a314da6", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "# Aufgabe 01.07.3 - Pascal'sches Dreieck\n", "\n", "Das Pascal'sche Dreieck sieht folgendermaßen aus:\n", "\n", "$$\\begin{matrix}1\\\\1\\quad1\\\\1\\quad2\\quad1\\\\1\\quad3\\quad3\\quad1\\\\1\\quad4\\quad6\\quad4\\quad1\\\\1\\quad5\\quad10\\quad10\\quad5\\quad1\\\\1\\quad6\\quad15\\quad20\\quad15\\quad6\\quad1\\\\\\vdots\\qquad\\qquad\\vdots\\qquad\\qquad\\vdots\\end{matrix}$$\n", "\n", "Die Zahlen darin sollen mit der Methode `binom(n,k)` berechnet werden, wobei $n$ die Zeile und $k$ die Spalte (innerhalb der Zeile) angibt.\n", "\n", "### Hinweis:\n", "Die Zeilen- und Spaltennummerierung beginnt bei 0!" ] }, { "cell_type": "markdown", "id": "b84a4891-d9e8-43ca-a0cd-b7b7a1e700ed", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Teil 1\n", "Recherchiere im Internet, wie das Pascal'sche Dreieck bzw. dessen Inhalte **rekursiv** berechnet werden können." ] }, { "cell_type": "raw", "id": "9a45ec13-32cd-420c-9c45-3f317edce6fb", "metadata": { "editable": true, "raw_mimetype": "", "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "binom(n,k) = binom(n-1,k) + binom(n-1,k-1)" ] }, { "cell_type": "markdown", "id": "81e736ba-89cd-4d1a-9b98-8475de6820bd", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Teil 2\n", "Notiere zunächst die rekursiven Funktionsaufrufe für das konkrete Zahlenbeispiel $n=3$ und $k=2$:" ] }, { "cell_type": "raw", "id": "58f5ec36-ae74-4ff0-9e47-4f0f83adbd7b", "metadata": { "editable": true, "raw_mimetype": "", "slideshow": { "slide_type": "" }, "tags": [] }, "source": [] }, { "cell_type": "markdown", "id": "ba4b1f2a-51cc-47ff-8b1f-f8444cddd7b9", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Teil 3\n", "Wann bricht die Rekursion ab, d.h. wann wird nicht mehr erneut die Funktion `binom` aufgerufen?" ] }, { "cell_type": "raw", "id": "261e0c80-0169-424f-840a-47c774029ced", "metadata": { "editable": true, "raw_mimetype": "", "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "bei k === 0 -> return 1 (linke Kante)\n", "bei k === n -> return 1 (rechte Kante)" ] }, { "cell_type": "markdown", "id": "37316573-632d-440f-9674-1dddbd5039f3", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Teil 3\n", "Programmiere die Funtion `binom`:" ] }, { "cell_type": "code", "execution_count": 2, "id": "b8c40034-1b97-458a-9e30-648c41cb3d7c", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "function binom(n, k) {\n", " if (k === 0) return 1\n", " if (k === n) return 1\n", "\n", " return binom(n-1, k) + binom(n-1, k-1)\n", "}" ] }, { "cell_type": "code", "execution_count": 3, "id": "e114cca7-8b8a-4f7e-8861-1a507a679d3d", "metadata": { "editable": false, "jupyter": { "source_hidden": true }, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "01.07.3: function ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "01.07.3: Parameter ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "01.07.3: binom(0,0)=1 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "01.07.3: binom(2,1)=2 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "01.07.3: binom(5,3)=10 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "01.07.3: binom(9,4)=126 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "01.07.3: binom(20,7)=77520 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "\n", "\u001b[0m\u001b[32mok\u001b[0m | 7 passed | 0 failed \u001b[0m\u001b[38;5;245m(2ms)\u001b[0m\n" ] } ], "source": [ "let _nr = \"01.07.3\"\n", "Deno.test(`${_nr}: function`, () => {\n", " assertEquals(typeof binom, 'function')\n", "})\n", "Deno.test(`${_nr}: Parameter`, () => {\n", " assertEquals(binom.length, 2)\n", "})\n", "Deno.test(`${_nr}: binom(0,0)=1`, () => {\n", " assertEquals(binom(0,0), 1)\n", "})\n", "Deno.test(`${_nr}: binom(2,1)=2`, () => {\n", " assertEquals(binom(2,1), 2)\n", "})\n", "Deno.test(`${_nr}: binom(5,3)=10`, () => {\n", " console.start()\n", " assertEquals(binom(5,3), 10)\n", " console.end()\n", "})\n", "Deno.test(`${_nr}: binom(9,4)=126`, () => {\n", " console.start()\n", " assertEquals(binom(9,4), 126)\n", " console.end()\n", "})\n", "Deno.test(`${_nr}: binom(20,7)=77520`, () => {\n", " console.start()\n", " assertEquals(binom(20,7), 77520)\n", " console.end()\n", "})" ] } ], "metadata": { "kernelspec": { "display_name": "Deno", "language": "typescript", "name": "deno" }, "language_info": { "codemirror_mode": "typescript", "file_extension": ".ts", "mimetype": "text/x.typescript", "name": "typescript", "nbconvert_exporter": "script", "pygments_lexer": "typescript", "version": "5.8.3" } }, "nbformat": 4, "nbformat_minor": 5 }