funktionen, rekusion, schleifen

julia123

Erfahrenes Mitglied
hi,
bin grade stark am wiederholen.
hab hier eine Aufgabe. :
n-te Gleid soll berechnet werden der Folge a.
a ist dabei Folge: 0,2,6,12,20.. (a0=0, a1=2,...)
ich hab es hier mal iterativ gelöst :
Code:
static fn(int n){
     if(n==0){
       return 0;
     }else if(n==1){
       return 2;
     }else{
        int c = 2;
        int i = 0;
        int erg = 0;
        while(n>=i){
          int erg = 0;
          erg = erg +c;
          i++
        } 
        return erg;
}

Hab ich das richtig gemacht?

ich würde das gerne die Aufgabe rekusiv lösen.Kann mir jemand tipps geben wie man bei solchen standart Aufgaben ran gehen soll.


hier meine lösung ist diese richtig?
Code:
public static rek(int n) {
 if(n<=0){
 return 0;
 }retrurn rek(n-1)+2;
}
 
Zuletzt bearbeitet:

Thinker

Mitglied
hi,
bin grade stark am wiederholen.
hab hier eine Aufgabe. :

n-te Gleid soll berechnet werden der Folge a.
a ist dabei Folge: 0,2,6,12,20.. (a0=0, a1=2,...)
Die Definition von ai wäre sehr hilfreich...

ich hab es hier mal iterativ gelöst :
Code:
static fn(int n){
     if(n==0){
       return 0;
     }else if(n==1){
       return 2;
     }else{
        int c = 2;
        int i = 0;
        int erg = 0;
        while(n>=i){
          int erg = 0;
          erg = erg +c;
          i++
        } 
        return erg;
}

Hab ich das richtig gemacht?

Nö.
  • Rückgabewert der Funktion fehlt
  • Variable "erg" doppelt deklariert
  • schliessende Klammer fehlt
  • a3 = 12 laut deiner Aufgabenstellung, dein Programm gibt 8 aus

Die Funktion compiliert nichtmal.

ich würde das gerne die Aufgabe rekusiv lösen.Kann mir jemand tipps geben wie man bei solchen standart Aufgaben ran gehen soll.

Grundsätzlich kann man fast direkt die mathematische Definition hinschreiben. ai ersetzt man durch fn(i) und aus jedem Spezialfall (wie a0) wird ein Zweig in einem if (bedingung) else if (andereBeingung)
 

sheel

I love Asm
Zur "Folge": Das ist wohl eher eine Reihe zur Folge 0 2 4 6 8 10 12....
Folge ist also 2k (wenn k der Index ist)
Die Reihe ist die Folge der Summen von Anfang bis zum Index.
Also 0, 0+2, 0+2+4, 0+2+4+6, 0+2+4+6+8, ...
Ergibt 0 2 6 12 20...

Mit einer Abwandlung der Gaußschen Summenformel (oder wie sie auch immer heißt)
kann man auch Direktberechnungen eines Glieds machen, ohne die vorderen Glieder
(k^2 + 2k)/4
 

julia123

Erfahrenes Mitglied
ja, ok das man das auch so mit einer mathematischen formel machen kann ist ja gut. aber angenommen ich hab kein plan. und will das rekusiv oder iterativ lösen. und ich hab grade kein plan wie ich das machen kann
 

sheel

I love Asm
Wenn du mal tief durchatmest, nicht verzweifelst
und die Netiquette beachtest wird schon vieles besser.

Die Folge (0 2 4 6 8 10...):
Versuch mal eine iterative Funktion zu machen, die einen Parameter "int anzahl" bekommt
und von der genannten Folge die ersten anzahl Elemente ausgibt (Schleife...)

Ich weiß, dass du eigentlich was Anderes tun sollst, aber versuch zuerst einmal das.
Danach ist nicht mehr viel mehr zur eigentlichen Aufgabe.
 

julia123

Erfahrenes Mitglied
Code:
	public static int rechteckZahl(int n) {
		if (n == 0) {
			return 0;
		} else {
			return n * (n + 1);
		}

	}

	public static int alleglieder(int x) { 
		int erg = 0;
		for (int i = 0; i != x; i++) {

			erg = rechteckZahl(i) + erg;

		}
		return erg;

	}

So was? Also eine Schleife in eine Schliefe wenn man es so will?


ps: was meinst du mit etwas anders machen?
 

sheel

I love Asm
Also, für die komplette iterative Lösung schaut alleglieder nicht so schlecht aus.
Nur was ist bitte rechteckZahl?
Hast du verstanden, wie man die Folgenglieder berechnet?
(bzw. verstehst du überhaupt, was da warum gemacht wird?)