Gå til innhold

Anbefalte innlegg

Hei jeg jobber med en skoleoppgave og har noen spørsmål ang rekursjon.

 

Her er spørsmålet:

 

 

 

/*(public class Oppgave1 {

 

public static void main(String[] args) {

 

int [] array = new int[3];

 

for (int i = 0; i < array.length; i++) {

 

array = i + 1;

 

}

 

skrivArray(array, array.length - 1);

 

System.out.println("\nFerdig!");

 

}

 

 

 

public static void skrivArray(int[] array, int indeks) {

 

if (indeks == 0) {

 

System.out.println(array[indeks]);

 

} else {

 

skrivArray(array, indeks - 1);

 

System.out.println(array[indeks]);

 

}

 

}

 

public static int summerArray(int[] array, int indeks) {

 

//manglende kode her

 

}

 

public static int finnMax(int[] array, int indeks) {

 

//manglende kode her

 

}

 

 

 

}*/)

 

 

 

 

Metoden summerArrat skal returnere summen av alle tallene i array

 

 

 

Metoden finnMax skal returnere det største tallet i array

 

 

 

Må bruke rekrusjon som er å kalle på samme metode man er i

Lenke til kommentar
Videoannonse
Annonse

1) Lær deg til å legge kode i

 blokker. Blir mye enklere å lese da den ikke fjerner tab.

 

2) rekursjonen kan gjøres ved at du for hver iterasjon øker index med 1. For at dette skal fungere må du gjøre en av to ting. Ene, og mest oversiktelige, er å legge til enda en variable i metodekallet så finnMax blir

finnMax(int[] array, int index, int max). Da sjekker du for hver gang om array[index] > max, da skal max = array[index].

 

Hvis det der derimot er ett metodeskall du har fått fra lærer/bok/gruppelærer trenger du en global variabel til å holde rede på det samme, derimot tviler jeg på at det er det, da jeg ikke ser noen grunn til at du skal sende med array som parameter da arrayet uansett er globalt og jeg ikke ser noe sted at du bruker ett annet array. Derfor kan finnMax(int[] array, int index) byttes ut med finnMax(int index, int max)

 

3) Velger å heller gi deg tips enn å gi deg kode, da dette er en skoleoppgave og du lærer mye mer ved å løse oppgaven selv og heller få tips.

 

Lykke til og spør hvis du står fast på noe.

Lenke til kommentar

public static int finnMax(int[] array, int index, int størst){

if(index == 0){

return array[index];

}

 

else{

 

int høyeste = finnMaxHjelp(array[index - 1], array[array.length-1]);

return finnMax(array, index-1, høyeste);

}

}

 

private static int finnMaxHjelp(int tall1, int tall2){

if(tall1 > tall2){

return tall1;

}

else{

return tall2;

}

}

 

jeg har valgt å legge til en hjelpemetode, som finner ut hvilket av 2 tall som er størst, men når jeg kjører får jeg at største tall er 1, og det er feil..

 

hva har jeg gjort feil?

Lenke til kommentar
public static int finnMax(int[] array, int index, int størst){
	if(index == 0){
		return array[index];
	}

	else{

		int høyeste = finnMaxHjelp(array[index - 1], array[array.length-1]);
		return finnMax(array, index-1, høyeste);	
	}
}

private static int finnMaxHjelp(int tall1, int tall2){
	if(tall1 > tall2){
		return tall1;
	}
	else{
		return tall2;
	}
}

 

jeg har valgt å legge til en hjelpemetode, som finner ut hvilket av 2 tall som er størst, men når jeg kjører får jeg at største tall er 1, og det er feil..

 

hva har jeg gjort feil?

 

Noen ting du må se på:

 

1) Du sender med det hittil største tallet, etterhvert kommer indexen til 0 uansett, da den er på 0 returnerer du, uavhengig av hva det største tallet er, array[0] som i dataene dine er 1. Altså, du returnerer tallet som ligger i array[0] uansett. Du skal returnere største, ikke array[0] og du må sjekke om array[0] er større enn det hittil største.

 

2) når du bruker finnMaxHjelp sender du med det neste tallet, ikke det tallet du nå har, og du sjekker alltid opp mot siste tallet i arrayet, ikke det største tallet du har.

 

3) Har lagt ved en kode som skal fungere på finnMax(int[] array, int index, int max). Du kan se på denne etter at du har sett litt på de punktene over. Sendes utestet, men regner med den skal fungere.

 

Klikk for å se/fjerne innholdet nedenfor

public static int finnMax(int index, int størst) {
if(array[index] > størst)
	størst = array[index];

if(index == 0)
	return størst;
else
	return finnMax(--index, størst);
}

 

summerArray(..) burde fungere mye på samme måte som denne.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...