Eine mögliche Implementation einer solchen rekursiven Funktion könnte wie folgt aussehen:
reverseNumber :: Int -> Int
reverseNumber x
| x < 10 = x
| otherwise = (x `mod` 10) * (10 ^ (numberOfDigits x - 1)) + reverseNumber (x `div` 10)
numberOfDigits :: Int -> Int
numberOfDigits x
| x < 10 = 1
| otherwise = 1 + numberOfDigits (x `div` 10)
- Der Rest der Division von x durch 10 wird ermittelt (x mod 10). Dies gibt uns die letzte Ziffer von x.
- Die Zahl x wird durch 10 geteilt, um die letzte Ziffer zu entfernen (x div 10).
- Der Rest aus Schritt 1 wird mit 10 hoch der Anzahl der Ziffern von x malgenommen und zur umgedrehten Zahl hinzu addiert.
- Schritt 2 und 3 werden nun rekursiv auf die neue Zahl angewendet.
Die Funktion numberOfDigits berechnet die Anzahl der Ziffern in einer Zahl.
Die Ausgabe der Funktion reverseNumber ist die umgedrehte Zahl.
Es ist wichtig zu beachten, dass diese Implementierung eine O(n) - Laufzeit hat, wo n die Anzahl der Ziffern der Eingabezahl ist.