diff --git a/Tutorium/tut16/README.md b/Tutorium/tut16/README.md new file mode 100644 index 0000000..8eaf68c --- /dev/null +++ b/Tutorium/tut16/README.md @@ -0,0 +1,50 @@ +--- +marp: true +paginate: true +theme: rose-pine +footer: EidP 2024 - Nils Pukropp - https://git.narl.io/nvrl/eidp-2024 +style: ".columns { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; } code { font-family: FiraCode Nerd Font; }" + +--- + +# Tutorium 16 - 2025-02-06 + +Zusatztreffen, Rekursion + +--- + +## Zusatztutorium - 13.02.2025 + +- Wann? + - 13.02. um 16:00 + - nicht ct, also nicht 15 nach +- Wo? + - Gebäude 101 + - Wir dürfen dann noch kurz einen Raum suchen +- Was? + - Wir Besprechen die Probeklausur anhand eurer Lösungen + - (Sind bis dahin auch korregiert) +- Fragen? + +--- + +Gib es schon vorab Fragen zu der Probeklausur? + +--- + +## Rekursion + +Rekursion ist einfach eine Funktion, die sich selber wieder aufruft. + +- Wir brauchen eine Abbruchbedingung +- Wir rufen geschickt rekursiv auf um bei der Abbruchbedingung anzukommen + +--- + +## Beispiele + +- Fibonacci +- Node in Tree einfügen +- Knapsack + +[Website zum Visualisieren](https://recursion.vercel.app/) \ No newline at end of file diff --git a/Tutorium/tut16/slides.pdf b/Tutorium/tut16/slides.pdf new file mode 100644 index 0000000..23f467c Binary files /dev/null and b/Tutorium/tut16/slides.pdf differ diff --git a/Tutorium/tut16/src/fibonnaci.py b/Tutorium/tut16/src/fibonnaci.py new file mode 100644 index 0000000..738641e --- /dev/null +++ b/Tutorium/tut16/src/fibonnaci.py @@ -0,0 +1,4 @@ +def fib(n: int) -> int: + if n in {0, 1}: + return n + return fib(n - 1) + fib(n - 2) diff --git a/Tutorium/tut16/src/knapsack.py b/Tutorium/tut16/src/knapsack.py new file mode 100644 index 0000000..e10694b --- /dev/null +++ b/Tutorium/tut16/src/knapsack.py @@ -0,0 +1,17 @@ +import math + + +def knapsack(items: list[tuple[float, float]], n: int, cap: float) -> float: + if (cap < 0): + return -math.inf + if (n == len(items)): + return 0 + + return max( + knapsack(items, n + 1, cap), + items[n][0] + knapsack(items, n + 1, cap - items[n][1]) + ) + + +if __name__ == '__main__': + print(knapsack([(100, 10), (70, 4), (50, 6), (10, 12)], 0, 12)) diff --git a/Tutorium/tut16/src/trees.py b/Tutorium/tut16/src/trees.py new file mode 100644 index 0000000..ca17ce7 --- /dev/null +++ b/Tutorium/tut16/src/trees.py @@ -0,0 +1,24 @@ +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class Node[T]: + mark: T + left: 'Optional[Node[T]]' = None + right: 'Optional[Node[T]]' = None + + +type Tree[T] = Optional[Node[T]] + + +def insert[T](t: Tree[T], value: T) -> Tree[T]: + if t is None: + return Node(value) + + if value < t.mark: + t.left = insert(t.left, value) + else: + t.right = insert(t.right, value) + + return t