Aufgabe 3 Block 2
parent
1893d224ed
commit
7d5391dae7
|
@ -1,4 +1,4 @@
|
|||
# Aufgabe 1 - Rekursive Implementierung von `map`
|
||||
# Aufgabe 2 - Rekursive Implementierung von `map`
|
||||
|
||||
## Ziel der Aufgabe
|
||||
Implementiere die Funktion `map` rekursiv. Die Funktion nimmt eine Funktion `f` und eine Liste `xs` und gibt eine neue Liste zurück, in der `f` auf jedes Element von `xs` angewendet wurde.
|
||||
|
@ -22,5 +22,9 @@ map (+1) [] -- []
|
|||
- Nutze Pattern Matching, um Basis- und Rekursionsfall zu unterscheiden
|
||||
|
||||
## Hinweise
|
||||
<details>
|
||||
<summary>Klicke auf den Pfeil für Hinweise</summary>
|
||||
|
||||
- Die leere Liste `[]` soll als Basisfall betrachtet werden
|
||||
- Die Funktion `f` soll auf das erste Element der Liste angewendet und dann mit dem Rest der Liste rekursiv weitergeführt werden
|
||||
- Die Funktion `f` soll auf das erste Element der Liste angewendet und dann mit dem Rest
|
||||
</details>
|
|
@ -23,6 +23,11 @@ zip [1,2,3] [] -- []
|
|||
- Nutze kein zip aus der Standardbibliothek
|
||||
- Die Funktion soll enden, sobald eine der beiden Listen leer ist
|
||||
|
||||
|
||||
## Hinweise
|
||||
- Der Basisfall tritt ein, wenn eine der Listen leer ist
|
||||
- Kombiniere das erste Element beider Listen zu einem Tupel und rufe zip rekursiv für die restlichen Elemente auf
|
||||
<details>
|
||||
<summary>Klicke auf den Pfeil für Hinweise</summary>
|
||||
|
||||
- Der Basisfall tritt ein, wenn eine der Listen leer ist
|
||||
- Kombiniere das erste Element beider Listen zu einem Tupel und rufe zip rekursiv für die restlichen Elemente auf
|
||||
</details>
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
# Aufgabe 3 - Fibonacci mit Tail-Rekursion
|
||||
|
||||
## Ziel der Aufgabe
|
||||
Implementiere die Fibonacci-Funktion mit **Tail-Rekursion**, ähnlich wie die `factorialTail`-Funktion. Die Lösung soll eine Hilfsfunktion mit einem Akkumulator verwenden.
|
||||
|
||||
<details>
|
||||
<summary>Spoiler: Klicke auf den Pfeil für factorialTail</summary>
|
||||
|
||||
```haskell
|
||||
factorialTail :: Integer -> Integer -> Integer
|
||||
factorialTail 0 acc = acc
|
||||
factorialTail n acc = factorialTail (n - 1) (n * acc)
|
||||
|
||||
factorial :: Integer -> Integer
|
||||
factorial n = factorialTail n 1
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
## Signatur
|
||||
```haskell
|
||||
fibonacciTail :: Integer -> Integer -> Integer -> Integer
|
||||
|
||||
```
|
||||
|
||||
## Beispiel Testfäle
|
||||
```
|
||||
fibTail 0 -- 0
|
||||
fibTail 1 -- 1
|
||||
fibTail 5 -- 5
|
||||
fibTail 10 -- 55
|
||||
fibTail 15 -- 610
|
||||
```
|
||||
|
||||
## Anforderungen
|
||||
- Implementiere fibonacciTail, eine Hilfsfunktion mit einem Akkumulator
|
||||
- Implementiere fibonacci, die fibonacciTail mit den Startwerten 0 und 1 aufruft
|
||||
- Nutze keine if-Statements, sondern Pattern Matching
|
||||
- Nutze Tail-Rekursion für eine speichereffiziente Lösung
|
||||
|
||||
## Hinweise
|
||||
<details>
|
||||
<summary>Klicke auf den Pfeil für Hinweise</summary>
|
||||
|
||||
- fibonacciTail benötigt drei Parameter:
|
||||
- 1: n (die Anzahl der Schritte)
|
||||
- 2: a (die vorherige Fibonacci-Zahl)
|
||||
- 3: b (die aktuelle Fibonacci-Zahl)
|
||||
- Wenn n == 0 ist, gib a zurück
|
||||
- Wenn n == 1 ist, gib b zurück
|
||||
- Ansonsten rufe die Funktion rekursiv mit n - 1 auf und verschiebe a und b
|
||||
</details>
|
|
@ -0,0 +1,23 @@
|
|||
-- Aufgabe: Implementiere die rekursive Fibonacci-Funktion mit Tail-Rekursion
|
||||
|
||||
fibonacciTail :: Integer -> Integer -> Integer -> Integer
|
||||
-- TODO:
|
||||
|
||||
-- Testfälle
|
||||
test1 = fibonacci 0 == 0
|
||||
test2 = fibonacci 1 == 1
|
||||
test3 = fibonacci 2 == 1
|
||||
test4 = fibonacci 3 == 2
|
||||
test5 = fibonacci 5 == 5
|
||||
test6 = fibonacci 10 == 55
|
||||
|
||||
-- Hauptfunktion zum Testen
|
||||
main :: IO ()
|
||||
main = do
|
||||
putStrLn "Teste fibonacci-Funktion mit Tail-Rekursion..."
|
||||
print test1
|
||||
print test2
|
||||
print test3
|
||||
print test4
|
||||
print test5
|
||||
print test6
|
Loading…
Reference in New Issue