Rekusion

Status
Nicht offen für weitere Antworten.

loxa789

Mitglied
Hallo Java-Forum!
So ich brauch mal wieder eure Hilfe. Ich soll den ersten Teil meines Programmes in eine Rekursion umwandeln leider verstehe ich diese noch nicht richtig. Das Programm soll die Anzahl der Werte in a[] ausgeben die grösser als i sind.



Code:
public class IterarionRekusiv {
  public static void main(String[] args) {
		
	 int[]a={0,1,2,3,4,5,6,7,8,9};
	 int[]b=new int[a.length];
	 
	 int i = 2; // veränderbare Variable
	 
	 System.out.println(doSomething(a,b,i));
	 System.out.println(doSomethingRek(a,b,0,0,i));	 
	 
	}// end main
	
  	static int doSomething (int[]a,int []b,int x) {
		int cnt = 0;
		for (int i=0; i<a. length ; i++) {
		  
			if (a[i] > x) {
			  b[cnt] = a[i]; 
		  cnt ++;
		 } // end if
		}// end for
		return cnt ;
	  }// end doSomeThing
  		
  	static int doSomethingRek(int[]a,int []b,int x,int cnt,int i) {
  		
  		if(i==a.length){
  		  return cnt;
  		}else{	
  			b[cnt]=a[i];
  		 return doSomethingRek(a, b, ++cnt,++i, x);	
  		}		
  	} // end doSomethingRek
}// end InerationRekusiv
 

loxa789

Mitglied
habe es nun etwas verbessert habe nun aber einen Array überlauf den ich nicht weg bekomme!

Code:
package Übung2;
public class IterarionRekusiv {
  public static void main(String[] args) {
		
	 int[]a={0,1,2,3,4,5,6,7,8,9};
	 int[]b=new int[a.length];
	 
	 int i = 3; // veränderbare Variable
	 
	 System.out.println(doSomething(a,b,i));
	 System.out.println(doSomethingRek(a,b,0,0,i));	 
	 
	}// end main
	
  	static int doSomething (int[]a,int []b,int x) {
		int cnt = 0;
		for (int i=0; i<a. length ; i++) {
		  
			if (a[i] > x) {
			  b[cnt] = a[i]; 
		  cnt ++;
		 } // end if
		}// end for
		return cnt ;
	  }// end doSomeThing
  		
  	static int doSomethingRek(int[]a,int []b,int x,int cnt,int i) {
  		
  		if(i==a.length){
  		  return cnt;
  		}
  		if(a[i]>x){
  			b[cnt]=a[i];
  			return doSomethingRek(a, b, ++cnt,++i, x);	
  		}else{	
  		 return doSomethingRek(a, b, cnt,++i, x);
  		}
  	} // end doSomethingRek
}// end InerationRekusiv
 
S

SlaterB

Gast
vergleiche die Reihenfolge deiner übergebenen Parameter mit der Definition der Operationen
 

loxa789

Mitglied
So nun sollte es passen, wenn jemand eine einfachere Lösung findet bitte mitteilen. Wie gesagt es geht nur um den Rekusiven teil. Danke


Code:
package Übung2;
public class IterarionRekusiv {
  public static void main(String[] args) {
		
	 int[]a={0,1,2,3,4,5,6,7,8,9};
	 int[]b=new int[a.length];
	 
	 int i =0;// veränderbare Variable
	 
	 System.out.println(doSomething(a,b,i));
	 System.out.println(doSomethingRek(a,b,0,0,i));	 
	 
	}// end main
	
  	static int doSomething (int[]a,int []b,int x) {
		int cnt = 0;
		for (int i=0; i<a. length ; i++) {
			if (a[i] > x) {
			  b[cnt] = a[i]; 
		      cnt ++;
		 } // end if
		}// end for
		return cnt ;
	  }// end doSomeThing
  		
  	static int doSomethingRek(int[]a,int []b,int x,int cnt,int i) {
  		
  		if(i==a.length-1){
  		  return cnt;
  		}
  		if(a[i]>x){
  		   b[cnt]=a[i];
  		   return doSomethingRek(a, b, x,++cnt, ++i);	
  		}else{	
  		   return doSomethingRek(a, b, x,cnt+1, ++i);
  		}
  	} // end doSomethingRek
}// end InerationRekusiv
 
M

maki

Gast
Solltest imho deinen Variablen sprechendere Namen geben.

i, x, cnt, a, b...

Komm schon, in Java schreibt man das ausführlich :)

index, (was zum Teufel ist x???), sourceArray, targetArray

oder so in der Art.

Merke: Jeder Depp kann Code schreiben der von Computern verstanden wird, die Kunst ist, Code zu schreiben der von Menschen verstanden wird.
Schlecht geschrieben Code zu dokumentieren ist Zeitverschwendung.
[hier ist Platz für noch mehr Allgemeinplätze]
usw., etc. pp.
 

loxa789

Mitglied
Danke für die Hilfe mein Code stimmt zwar immer noch nicht ganz glaube aber nun den Fehler gefunden zu haben. Wie gesagt ich sollte mehr aufpassen und übersichtlicher programmieren dann sucht man nicht stundenlang nach kleinen Fehlern.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben