return Problem

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo, hab ein kleines programm geschrieben, in dem in einer methode im return der aufruf von der selben methode nochmal vorgenommen wird nur jetzt mit return (methode(n-1)+methode(n-2)) woher weiß ich welche der beiden methodenaufrufe als erstes berechnet wird? Start bzw. Aufruf der methode mit z.B. int n=5

Vielen Dank
 
Anonymous hat gesagt.:
...woher weiß ich welche der beiden methodenaufrufe als erstes berechnet wird?
Und woher sollen wir wissen, was du meinst? Ehrlich - ich kapiere kein Wort, außer, dass du deine Methode rekursiv aufrufst. Oder nicht?
 
Also Mehtoden = algo1 es geht hier um return(algo1(n-1)+algo1(n-2)); was passiert da genau, er ruft die methode algos1() wieder auf, aber wer zuerst algo1(n-1) oder algo1(n-2)?

Code:
public class Algos{

public int algo1(int n){
if(n>1){
return(algo1(n-1)+algo1(n-2));
}
else if(n==1){
return 1;
}
return 0;
}

public static void main(String[] args){
Algos a=new Algos();
int n=5;
System.out.println(a.algo(n));

}
 
ne, löschen können wir das leider auch nicht ... das kann allerhöchstens der moderator. zu deinem problem: da ich jetzt einfach mal zu faul bin dein programm auszutesten bzw. sowas selbst zu schreiben und zu versuchen geb ich dir mal hilfe zur selbsthilfe und schreib dir das, was ich tun würde um dir die korrekte antwort zu geben.

bastel deine methode doch mal folgendermaßen um:
Code:
public int algo1(int n, int level){ 
    System.out.println(level+" -> "+n);
    if(n>1){ 
        return(algo1(n-1,level+1)+algo1(n-2,level+1)); 
    } 
    else if(n==1){ 
        return 1; 
    } 
    return 0; 
}
wenn du beispielsweise mit den eingabewerten n=5 und level=0 startest, wirst du als ausgabe etwas in der art hier erhalten:
0 -> 5
1 -> 4
...

achte dabei auf das level 1 ob n den wert 3 oder 4 zuerst hatte. dementsprechend kannst du darauf schließen, welcher der beiden aufrufe zuerst abgesetzt wird.

viel erfolg

wayne
 
Hab das jetzt mal so umgesetzt, und glaube das algo1(n-1,level+1) zuerst aufgerufen wird, allerdings verstehe ich nicht das bei der Ausgabe s.u. bei HIER, das level wieder auf 3 fällt, wo es doch schon auf 4 war und nirgendwo im code was abgezogen wird.

Anmerkung Habe noch eine Ausgabe eingefügt n=Zahl u. L=level und habe das Systmen.out.println(level+"->"+n); umgedreht siehe code, weil der aufruf auch in der reihenfolge ist!

Code:
public class Test {
public int algo1(int n, int level){
	System.out.println("n  L");
	System.out.println(n+"->"+level);
	if(n>1){
		return(algo1(n-1,level+1)+algo1(n-2,level+1));
	}
	else if(n==1){
		return 1;
	}
return 0;
}
	
	
	public static void main(String[] args){
		Test t=new Test();
		
		t.algo1(5,0);
	}
}

Ausgabe

n L
5->0
n L
4->1
n L
3->2
n L
2->3
n L
1->4
n L
0->4
n L
1->3 ---> HIER
n L
2->2
n L
1->3
n L
0->3
n L
3->1
n L
2->2
n L
1->3
n L
0->3
n L
1->2
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben