0 Daumen
500 Aufrufe

Hey,


ich möchte eine rekursive Funktion schreiben, die als erstes die gegebene Zahl z.B. 123 durch 10 dividiert und den Rest aufschreibt (mod 10) das wäre dann 3. Dann die Zahl durch 10 teilen, damit man die letzte Zahl los wird (div 10) dann haben wir 12. Und wiederholen nun alles rekursiv.

Somit wir dann als Eingabe 123 haben und als Ausgabe 321.

Danke im Voraus

Avatar von

1 Antwort

0 Daumen

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)

  1. Der Rest der Division von x durch 10 wird ermittelt (x mod 10). Dies gibt uns die letzte Ziffer von x.
  2. Die Zahl x wird durch 10 geteilt, um die letzte Ziffer zu entfernen (x div 10).
  3. Der Rest aus Schritt 1 wird mit 10 hoch der Anzahl der Ziffern von x malgenommen und zur umgedrehten Zahl hinzu addiert.
  4. 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.

Avatar von

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community