rekursive Funktion zur Berechnung der Spiegelzahl

moccajoghurt

Bekanntes Mitglied
Hi, wieder einmal habe ich Probleme mit einer rekursiven Funktion. Meine Funktion funktioniert nur bei zweistelligen Zahlen, alles was darüber hinaus geht, wird bei mir fehlerhaft. Die Aufgabe lautet:

Aufgabe 6:
Folgendes Programm berechnet iterativ die Spiegelzahl einer eingegebenen Zahl:
Java:
public class Spiegelzahl {
public static int reverse(int zahl) {
int ergebnis = 0;
while (zahl != 0) {
ergebnis = ergebnis * 10 + zahl % 10;
zahl /= 10;
}
return ergebnis;
}
public static void main(String[] args) {
int eingabe = IO.readInt("Zahl (>=0): ");
IO.println(reverse(eingabe));
}
}
Formen Sie das Programm um in ein gleichwertiges rekursives Programm (while, for, do sind nicht erlaubt!)!


Meine (fehlerhafte) Funktion:

Java:
	static int reverse(int zahl) {
		if (zahl/10 == 0) {
			return zahl%10;
		}
		return zahl%10*10 +reverse(zahl/10);		
	}

Bitte um Hilfe, Danke im voraus.
 
Zuletzt bearbeitet:
Das wäre mal mein Vorschlag.

Java:
    public static void main(String[] args) {
        int i = 123456;
        System.out.println(reverse(i));
    }

    public static int reverse(int i) {
        int length = String.valueOf(i).length();
        return reverse_rek(i, length);
    }

    public static int reverse_rek(int i, int length) {
        if (length < 1) {
            return 0;
        } else {
            return (int)Math.pow(10, length-1) * (i % 10) + reverse_rek(i/10, length-1);
        }
    }
Geht aber sicherlich auch irgendwie ohne hilfsfunktion 😉
 
Wie kann man diese Aufgabenstellung interpretieren:

"Formen Sie das Programm um in ein gleichwertiges rekursives Programm (while, for, do sind nicht erlaubt!)!" ?

Bedeutet es, dass man ebenfalls nur eine Funktion verwenden sollte und von der anderen Funktion nicht großartig abweichen sollte, oder soll einfach nur dasselbe Ergebnis geliefert werden?

Den Kursleiter kann ich nicht fragen, denn es ist ein anonymer online-Kurs.
 
Das heißt einfach nur dass du eine rekursive Funktion (Rekursion ? Wikipedia) finden sollst die das selbe Ergebnis berechnet wie die gegebene iterative Variante (rekursion natürlich ohne do/while/for).
Ob diese eine Hilfsfunktion noch erlaubt ist weiß ich nicht genau.
 
Ich würde es so machen:
Java:
public static int reverse(int zahl) {
	if (zahl<10) {
		return zahl;
	}
	return (zahl%10)*((int) (Math.pow(10,(String.valueOf(zahl)).length()-1)))+reverse(zahl/10);
}
 
Java:
    public static int reverse(int zahl) {
        return rev(zahl, 0);
    }
    
    private static int rev(int zahl, int ergebnis) {
        return zahl == 0 ? ergebnis : rev(zahl / 10, 10 * ergebnis + zahl % 10);
    }
 

Zurück
Oben