{ "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.1 - Fakultät\n", "\n", "Eine wichtige mathematische Funktion ist die Fakultät:\n", "$$n! = 1\\cdot2\\cdot3\\cdots(n-2)\\cdot(n-1)\\cdot n$$\n", "zum Beispiel:\n", "$$5!=1\\cdot2\\cdot3\\cdot4\\cdot5=120$$\n", "\n", "Ziel soll sein, die Funktion `fakultaet` rekursiv zu programmieren. Dafür gibt es zunächst einige Vorüberlegungen:" ] }, { "cell_type": "markdown", "id": "81e736ba-89cd-4d1a-9b98-8475de6820bd", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Teil 1\n", "Notiere zunächst die rekursiven Funktionsaufrufe für das konkrete Zahlenbeispiel $n=5$:" ] }, { "cell_type": "raw", "id": "58f5ec36-ae74-4ff0-9e47-4f0f83adbd7b", "metadata": { "editable": true, "raw_mimetype": "", "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "fakultaet(5) = fakultaet(4) * 5\n", "fakultaet(4) = fakultaet(3) * 5\n", "fakultaet(3) = fakultaet(2) * 5\n", "fakultaet(2) = fakultaet(1) * 5\n", "fakultaet(1) = 1\n", "\n", "allgemein: fakultaet(n) = fakultaet(n-1) * n" ] }, { "cell_type": "markdown", "id": "ba4b1f2a-51cc-47ff-8b1f-f8444cddd7b9", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Teil 2\n", "Wann bricht die Rekursion ab, d.h. wann wird nicht mehr erneut die Funktion `fakultaet` aufgerufen?" ] }, { "cell_type": "raw", "id": "261e0c80-0169-424f-840a-47c774029ced", "metadata": { "editable": true, "raw_mimetype": "", "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "bei n === 1" ] }, { "cell_type": "markdown", "id": "37316573-632d-440f-9674-1dddbd5039f3", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Teil 3\n", "Programmiere die Funktion `fakultaet`:" ] }, { "cell_type": "code", "execution_count": 2, "id": "b8c40034-1b97-458a-9e30-648c41cb3d7c", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "function fakultaet(n) {\n", " if (n === 1) return 1\n", " return fakultaet(n-1) * n\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.1: function ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "01.07.1: Parameter ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "01.07.1: fakultaet(1)=1 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "01.07.1: fakultaet(3)=6 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "01.07.1: fakultaet(5)=120 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "01.07.1: fakultaet(11)=39916800 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n", "\n", "\u001b[0m\u001b[32mok\u001b[0m | 6 passed | 0 failed \u001b[0m\u001b[38;5;245m(1ms)\u001b[0m\n" ] } ], "source": [ "let _nr = \"01.07.1\"\n", "Deno.test(`${_nr}: function`, () => {\n", " assertEquals(typeof fakultaet, 'function')\n", "})\n", "Deno.test(`${_nr}: Parameter`, () => {\n", " assertEquals(fakultaet.length, 1)\n", "})\n", "Deno.test(`${_nr}: fakultaet(1)=1`, () => {\n", " assertEquals(fakultaet(1), 1)\n", "})\n", "Deno.test(`${_nr}: fakultaet(3)=6`, () => {\n", " assertEquals(fakultaet(3), 6)\n", "})\n", "Deno.test(`${_nr}: fakultaet(5)=120`, () => {\n", " assertEquals(fakultaet(5), 120)\n", "})\n", "Deno.test(`${_nr}: fakultaet(11)=39916800`, () => {\n", " assertEquals(fakultaet(11), 39916800)\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 }