Algorithmus für eine Reihe implementieren

Hätte eine Frage bezüglich einer Beispielübung die mir untergekommen ist:
Implementiere einen Algorithmus für die Reihe iterativ als auch rekursiv:
1 1
2 2
3 3
4 3
5 4
6 7
7 9
8 10
9 15
10 23
Eingabe: Eine Zahl (für die der Reihenwert berechnet werden soll, z.B. 7) Ausgabe: der entsprechende Reihenwert. (z.B. Eingabe von 7 ergibt 9).
Die Logik hinter der Reihe habe ich verstanden: Zahl1 * 2 - Zahl2 + Zahl3 = Zahl4.
Aber wie würde man sowas lösen? Hab echt keine Ahnung wie man sowas umsetzen kann hätte vielleicht jemand eine Idee?
Hier mein Ansatz:
public static void main(String[] args) {

System.out.println("Geben Sie eine Zahl ein!");
Scanner scan = new Scanner(System.in);
int zahl = scan.nextInt();
System.out.println("Das Ergebnis lautet: " + berechnezahl(zahl));

}
private static int berechnezahl (int zahl){
int ergebnis = 0;
int zahl1 = 1;
int zahl2 = 2;
int zahl3 = 3;


if (zahl >=0){
for (int i = 0; i <= zahl; i++) {



ergebnis = zahl1*2 + zahl2 +zahl3;

}
}
else {

}

return ergebnis;
}
​
 
Bitte immer in Code-Tags posten.
Java:
    public static void main(String[] args) {

        System.out.println("Geben Sie eine Zahl ein!");
        Scanner scan = new Scanner(System.in);
        int zahl = scan.nextInt();
        System.out.println("Das Ergebnis lautet: " + berechnezahl(zahl));

    }

    private static int berechnezahl(int zahl) {

        int ergebnis = 0;
        int zahl1 = 1;
        int zahl2 = 2;
        int zahl3 = 3;

        if (zahl >= 0) {

            for (int i = 0; i <= zahl; i++) {
                ergebnis = zahl1 * 2 + zahl2 + zahl3;
            }
        }

        else {

        }

        return ergebnis;
    }
 
Die Logik hinter der Reihe habe ich verstanden: Zahl1 * 2 - Zahl2 + Zahl3 = Zahl4.
Aber wie würde man sowas lösen?
Indem man die Gleichung anders beschreibt. Für jede natürliche Zahl n>0 gilt
Code:
        / n                              für n < 4
rw(n) ={
        \ rw(n-3)*2 - rw(n-2) + rw(n-1)  sonst
Damit hast Du die Rekursion, die man direkt umsetzen kann.
Java:
public int rw(int n) {
    return n < 4 ? n : rw(n-3) * 2 - rw(n-2) + rw(n-1);
}
Iterativ kann man das auf Deiner Grundlage umsetzen.
Java:
public int rw(int n) {
    if (n < 4) { return n; }
    int z1 = 1, z2 = 2, z3 = 3;
    for (int i = 4; i <= n; i++) {
        int z4 = z1*2 - z2 + z3;
        z1 = z2;
        z2 = z3;
        z3 = z4;
    }
    return z3;
}
 

Neue Themen


Zurück
Oben