# Tiefe der Rekursion als Abbruchbedingung



## Linad (12. Dez 2004)

Ich möchte eine Dezimalzahl in ein anderes Zahlensystem umwandeln und zwar mit einer rekursiven Methode.

z.B. 0.456 ins 3er System

Nun mein Problem:

Ich finde nicht heraus, wie ich die Abbruchbedingung initialisiere. Mein Algorithmus muss ja mal terminieren bei einer unendlichen Zahlenfolge und nicht erst wenn der Speicher voll ist. :bahnhof: 

Meine Code Beispiel funktioniert noch nicht, die Abbruchbedingung ist noch gar nicht mal definiert und sonst stimmt auch noch was nicht.



```
public String calculateDecimal(double num, int radix){
        
        double mul = num * radix;
        double rest = mul - (int)mul;
        
        if (num == 0){
            return(Integer.toString((int)mul));
        }
        return(calculateDecimal(rest,radix) + Integer.toString((int)mul));
    }
```


----------



## bygones (12. Dez 2004)

wieso du hast doch eine Abbruchedingung - falls num == 0...

ob sie korrekt ist heißt das ja noch nicht...


----------



## Linad (12. Dez 2004)

Du hast recht. Der Code ist falsch. Aber genau da liegt ja mein Problem bei der Abbruchbedingung. Hat jemand eine Idee wie man die Abbruchbedingung korrekt programmieren kann?


----------



## Icewind (12. Dez 2004)

hm naja so weit ich mir das überlegt hab musst du in die else bedingung schreiben das er die methode noch mal aufruft und nach dem if ein returnt....


----------



## Linad (13. Dez 2004)

also ich habe mir folgende Lösung erarbeitet:


```
private int deep;

public String calculateDecimal(double num, int radix){
        
        double mul = num * radix;
        double rest = mul - (int)mul;
        
        if (this.deep == 20){
            return(Integer.toString((int)mul));
        }

        if (num < 0.0001){
            return("");
        }

        this.deep++;

        return(Integer.toString((int)mul) + calculateDecimal(rest,radix));

    }
```

Jetzt brauche ich eine Klassenvariable um die Tiefe der Rekursion zu bestimmen. Der Code funktioniert.

Wenn jemand eine bessere Lösung oder Anmerkungen hat -> you are welcome


----------



## Beni (13. Dez 2004)

sowas?

```
public String calculateDecimal(double num, int radix){
        return calculateDecimal( num, radix, 0 );
}
private String calculateDecimal(double num, int radix, int deep ){
       
        double mul = num * radix;
        double rest = mul - (int)mul;
       
        if (deep == 20){
            return(Integer.toString((int)mul));
        }

        if (num < 0.0001){
            return("");
        }

        return(Integer.toString((int)mul) + calculateDecimal(rest,radix, deep+1 ));

    }
```

*[Edit: man sollte allerdings dann auch nicht mehr die alte Variable benutzen...]*


----------



## Linad (13. Dez 2004)

ja, sowas :wink:  vielen Dank!


----------

