Anmäl dig till Roborock Challenge!
Permalänk
Medlem

Rekursiv java metod.

Skriv en rekursiv Java-metod print(int[] a, int n) som skriver ut talen i arrayen arr
baklänges.

Det jag förstår är att int n kommer representera startpositionen i arrayen, med andra ord a.length
och att man sedan måste stega ner till dess att n==0 och då returnera alla tal baklänges.

Eller om man ska tänka att n=0 och sedan stega igenom hela arrayen och när man kommit till sista så returnerar man alla tal.

Men jag får inte ett hum om hur jag ska skriva det rekursivt så jag är tacksam för all hjälp.

MvH Kreppe

Visa signatur

"This is VAR, spelled A-U-T-O"

Permalänk
Medlem

jag skulle gissa n representerar längden på arrayen (inte startpositionen)

Var längesen jag skrev något rekursivt men testa
1. skriv ut talet på position n i a
2. kalla på print med n-1 som längd argument
3. avsluta om n<0 (givetvis)

Permalänk
Medlem

Jo, det är jag såklart med på
men min program skriver ut alla tal i arrayen baklänges men sedan fortsätter den och jag får ett stackoverflow exception

Min kod atm:

public static int print(int[] a, int n){
if(n>=0)
System.out.println(a[n]);
return print(a,n-1);
}

Visa signatur

"This is VAR, spelled A-U-T-O"

Permalänk
Medlem
Skrivet av Kreppe:

Jo, det är jag såklart med på
men min program skriver ut alla tal i arrayen baklänges men sedan fortsätter den och jag får ett stackoverflow exception

Du saknar hakparenteser runt din ifsats, se korrigerad kod nedan

public static int print(int[] a, int n) { if(n>=0) { System.out.println(a[n]); return print(a,n-1); } }

Om du inte använder hakparenteser runt din ifsats så kommer ifsatsen bara hantera första uttrycket i ditt fall System.out.println(a[n]);. Så den skriver inte ut texten, men den forsätter på nästa rad och då anropar din metod igen

Permalänk
Medlem

Ser fint ut
Några tankar dock (kan möjligtvis ha fel):
funktionen ska enligt er returnera en int. Varför returnera en funktion istället?
Varför använda return öht?

Permalänk
Medlem

haha, tack Tino.. pinsamt misstag.

är inte riktigt med på vad du menar jurgen89, return öht?

Visa signatur

"This is VAR, spelled A-U-T-O"

Permalänk
Medlem

Din funktion ska bara skriva ut, eller hur? Inte returnera en int? Därför torde detta vara mer korrekt:

public static void print(int[] a, int n) { if(n>=0) { System.out.println(a[n]); print(a,n-1); } }

Ändringar: int->void, samt tog bort return.

Visa signatur

Jag är en optimist; det är aldrig så dåligt så att det inte kan bli sämre.

Permalänk
Medlem

ja, helt korrekt zyberzero. löste det på ett liknande sätt efter lite tester.

Min kod:
public static void print(int[] a, int n){

if(n>=a.length){
print(a,n+1);
System.out.println(a[n]);
}
}

anropas med print(a,0) istället för print(a,a.length-1)

tack för hjälpen alla.

Visa signatur

"This is VAR, spelled A-U-T-O"