Lineare Rekursion -> iterative Schleife

Constanzo

Mitglied
Moin zusammen.

Ich versuche seit ein paar Stunden diese Rekursion in Schleifenform zu gießen:

Code:
    private static long verkette(int i, int k) {
        
        return k < 10
                ? 10 * i + k
                : verkette(i, k / 10) * 10 + k % 10;
    }

Ich bekomm es aber einfach nicht hin. Vielleicht kann mir hier jemand helfen 🙂

Edit: Zur Information: Die Methode verknüpft zwei int Werte. Zum Beispiel wird aus 13 und 456 --> 13456.
 
Warum machst du nicht einfach String.concat()? Wäre das Einfachste
Ansonsten musst du doch nur auf die zweite Zahl das x-Fache (wobei x de erste Zahl ist) der (n + 1)-ten Potenz von 10 draufrechnen, wobei n sich ergibt über int(Zahl2 / (10 ^ i)) mit i = 0..15 (10^15 ist doch die Grenze für int, also pi mal Daumen, oder?).

Bsp.
Code:
465 = 4,65 * 10 ^2
-->n + 1 = 3
10 ^ n = 1000
Zahl: Zahl2 + Zahl1 * 10^n = 13465
 
Zuletzt bearbeitet:
Ich mache das Ganze nur zur Übung, deshalb kommt die String-Geschichte nicht infrage. Aber klar, das wäre natürlich das einfachste.
In der Klausur demnächst sollten wir die Umformung linear rekursiv -> iterativ beherrschen.

Deine Lösung muss ich mir noch mal genauer ansehen 🙂

Mmh, danke für deine Lösung. Das Problem ist, dass die Vorgehensweise stark abweicht von meiner rekursiven Lösung. Ist es nicht theoretisch möglich das ähnlich wie in meinem Codebeispiel, nur eben in 'ner while-Schleife hinzukriegen?
 
Zuletzt bearbeitet:
Hier mal ein wenig Pseudocode, der dir vielleicht hilft 🙂
Code:
ergebnis = i;
so lange k Stellen übrig hat:
    ergebnis *= 10;
    r = ersteZifferVonK();
    ergebnis += r;
    entferneErsteZifferVonK();
return ergebnis;
Die einzelnen Operationen sind nur etwas Magie mit Math.log10 und Math.pow 😉
 

Zurück
Oben