# rekursive Funktion zur Berechnung der Spiegelzahl



## moccajoghurt (21. Jul 2010)

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:

```
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: 


```
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.


----------



## eRaaaa (21. Jul 2010)

Magst du uns auch deinen Versuch zeigen?


----------



## moccajoghurt (21. Jul 2010)

jop, meine Funktion hab ich in meinen ersten post hineineditiert.


----------



## Gast2 (22. Jul 2010)

Das wäre mal mein Vorschlag.


```
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


----------



## moccajoghurt (22. Jul 2010)

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.


----------



## Gast2 (22. Jul 2010)

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.


----------



## XHelp (22. Jul 2010)

Ich würde es so machen:

```
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);
}
```


----------



## Landei (22. Jul 2010)

```
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);
    }
```


----------

