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