tut 16
This commit is contained in:
50
Tutorium/tut16/README.md
Normal file
50
Tutorium/tut16/README.md
Normal file
@ -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/)
|
BIN
Tutorium/tut16/slides.pdf
Normal file
BIN
Tutorium/tut16/slides.pdf
Normal file
Binary file not shown.
4
Tutorium/tut16/src/fibonnaci.py
Normal file
4
Tutorium/tut16/src/fibonnaci.py
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
def fib(n: int) -> int:
|
||||||
|
if n in {0, 1}:
|
||||||
|
return n
|
||||||
|
return fib(n - 1) + fib(n - 2)
|
17
Tutorium/tut16/src/knapsack.py
Normal file
17
Tutorium/tut16/src/knapsack.py
Normal file
@ -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))
|
24
Tutorium/tut16/src/trees.py
Normal file
24
Tutorium/tut16/src/trees.py
Normal file
@ -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
|
Reference in New Issue
Block a user