52 lines
1.4 KiB
Markdown
52 lines
1.4 KiB
Markdown
# 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> |