239 lines
5.8 KiB
Plaintext
239 lines
5.8 KiB
Plaintext
{
|
|
"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.2 - Fibonacci\n",
|
|
"\n",
|
|
"Die Fibonacci Folge $F$\n",
|
|
"$$0,1,1,2,3,5,8,13,21,34,55,\\dots$$\n",
|
|
"ist folgendermaßen definiert:\n",
|
|
"* $F(0)=0$\n",
|
|
"* $F(1)=1$\n",
|
|
"* $F(2)=F(0)+F(1)$\n",
|
|
"* $F(3)=F(1)+F(2)$\n",
|
|
"* bzw. allgemein: $F(n)=F(n-2)+F(n-1)$\n",
|
|
"\n",
|
|
"Diese soll nun mit einer Funktion `fibo` programmiert werden, die einen Parameter $n$ übergeben bekommt und dann die $n$-te Fibonacci-Zahl berechnet.\n",
|
|
"\n",
|
|
"### Hinweis:\n",
|
|
"$0$ ist die \"nullte\" Zahl, 1 die erste."
|
|
]
|
|
},
|
|
{
|
|
"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": [
|
|
"fibo(5) = fibo(4) + fibo(3)\n",
|
|
"fibo(4) = fibo(3) + fibo(2)\n",
|
|
"fibo(3) = fibo(2) + fibo(1)\n",
|
|
"fibo(2) = fibo(1) + fibo(0)\n",
|
|
"fibo(1) = 1\n",
|
|
"fibo(0) = 0\n",
|
|
"\n",
|
|
"allgemein: fibo(n) = fibo(n-1) + fibo(n-2)"
|
|
]
|
|
},
|
|
{
|
|
"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 `fibo` aufgerufen?"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "raw",
|
|
"id": "261e0c80-0169-424f-840a-47c774029ced",
|
|
"metadata": {
|
|
"editable": true,
|
|
"raw_mimetype": "",
|
|
"slideshow": {
|
|
"slide_type": ""
|
|
},
|
|
"tags": []
|
|
},
|
|
"source": [
|
|
"bei n === 1 -> return 1\n",
|
|
"bei n === 0 -> return 0"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "37316573-632d-440f-9674-1dddbd5039f3",
|
|
"metadata": {
|
|
"editable": false,
|
|
"slideshow": {
|
|
"slide_type": ""
|
|
},
|
|
"tags": []
|
|
},
|
|
"source": [
|
|
"## Teil 3\n",
|
|
"Programmiere die Funtion `fibo`:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "b8c40034-1b97-458a-9e30-648c41cb3d7c",
|
|
"metadata": {
|
|
"editable": true,
|
|
"slideshow": {
|
|
"slide_type": ""
|
|
},
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"function fibo(n) {\n",
|
|
" if (n === 1) return 1\n",
|
|
" if (n === 0) return 0\n",
|
|
"\n",
|
|
" return fibo(n-1) + fibo(n-2)\n",
|
|
"}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "e114cca7-8b8a-4f7e-8861-1a507a679d3d",
|
|
"metadata": {
|
|
"editable": true,
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
},
|
|
"slideshow": {
|
|
"slide_type": ""
|
|
},
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"01.07.2: function ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n",
|
|
"01.07.2: Parameter ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n",
|
|
"01.07.2: fibo(1)=1 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n",
|
|
"01.07.2: fibo(3)=2 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n",
|
|
"01.07.2: fibo(5)=5 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n",
|
|
"01.07.2: fibo(11)=89 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(0ms)\u001b[0m\n",
|
|
"01.07.2: fibo(23)=28657 ... \u001b[0m\u001b[32mok\u001b[0m \u001b[0m\u001b[38;5;245m(2ms)\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[0m\u001b[32mok\u001b[0m | 7 passed | 0 failed \u001b[0m\u001b[38;5;245m(3ms)\u001b[0m\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"let _nr = \"01.07.2\"\n",
|
|
"Deno.test(`${_nr}: function`, () => {\n",
|
|
" assertEquals(typeof fibo, 'function')\n",
|
|
"})\n",
|
|
"Deno.test(`${_nr}: Parameter`, () => {\n",
|
|
" assertEquals(fibo.length, 1)\n",
|
|
"})\n",
|
|
"Deno.test(`${_nr}: fibo(1)=1`, () => {\n",
|
|
" assertEquals(fibo(1), 1)\n",
|
|
"})\n",
|
|
"Deno.test(`${_nr}: fibo(3)=2`, () => {\n",
|
|
" assertEquals(fibo(3), 2)\n",
|
|
"})\n",
|
|
"Deno.test(`${_nr}: fibo(5)=5`, () => {\n",
|
|
" assertEquals(fibo(5), 5)\n",
|
|
"})\n",
|
|
"Deno.test(`${_nr}: fibo(11)=89`, () => {\n",
|
|
" assertEquals(fibo(11), 89)\n",
|
|
"})\n",
|
|
"Deno.test(`${_nr}: fibo(23)=28657`, () => {\n",
|
|
" assertEquals(fibo(23), 28657)\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
|
|
}
|