Oppgave 1
Bruk en lenkeliste (f.eks den du lagde i oblig 3) fra tidligere til ? l?se de f?lgende oppgavene.
1a)
Skriv ut elementene i lenkelisten f?rst i riktig, s? i motsatt rekkef?lge ved hjelp av rekursjon. Hvor stor forskjell trenger det ? v?re i disse to metodene?
1b)
Finn st?rrelsen (lengden) p? lenkeliste med rekursjon.
Oppgave 2
2a)
Vi har en rekke med kaniner. Alle kaninene har to ?rer som st?r rett til v?rs. Vi ?nsker n? ? skrive en rekursiv metode for ? regne ut hvor mange ?rer kaninene totalt har st?ende opp i v?ret. Metoden skal ta inn antall kaniner.
class KaninOreTeller {
public static void main(String[] args) {
System.out.println(tellKaninOrer(0)); //Forventet resultat 0
System.out.println(tellKaninOrer(1)); //Forventet resultat 2
System.out.println(tellKaninOrer(2)); //Forventet resultat 4
System.out.println(tellKaninOrer(12)); //Forventet resultat 24
System.out.println(tellKaninOrer(234)); //Forventet resultat 468
}
public static int tellKaninOrer(int antallKaniner){
//din kode her
}
}
2b)
Noen av kaninene har n? kun ett ?re st?ende opp. I dette tilfellet vil kaniner p? partallsplasser (2,4,6, ...) ha to ?rer oppe, mens kaniner p? oddetallsplasser (1,3,5, …) har kun ett ?re oppe. Endre metoden i 2a slik at den tar hensyn til dette.
TIPS: antallKaniner avgj?r om den st?r p? en partalls- eller oddetallsplass)
class KaninOreTeller {
public static void main(String[] args) {
System.out.println(tellKaninOrer(0)); //Forventet resultat 0
System.out.println(tellKaninOrer(1)); //Forventet resultat 1
System.out.println(tellKaninOrer(2)); //Forventet resultat 3
System.out.println(tellKaninOrer(12)); //Forventet resultat 18
System.out.println(tellKaninOrer(234)); //Forventet resultat 351
}
public static int tellKaninOrer(int antallKaniner){
//din kode her
}
}
Oppgave 3
3a)
Skriv en metode som rekursivt finner antall forekomster av en string i en annen string. Du kan anta at ingen av stringen er tomme (""). (Et tips her kan v?re ? bruke substring- og length-metodene til String).
class StringOprasjoner {
public static void main(String[] args) {
String str = "kattkukatt";
System.out.println(antallSubStringer(str, "katt")); //Forventet resultat 2
System.out.println(antallSubStringer(str, "ku")); //Forventet resultat 1
System.out.println(antallSubStringer(str, "hund")); //Forventet resultat 0
}
public static int antallSubStringer(String str, String sub){
//din kode her
}
}
3b)
Lag en rekursiv metode som tar inn en string hvis en bokstav forekommer 2 ganger etter hverandre. F.eks. ved l i hello skal det plasseres en * i mellom de doble bokstavene (hello blir da hel*lo). (Et tips her kan v?re ? bruke substring-, length- og charAt-metodene til String)
class StringOprasjoner {
public static void main(String[] args) {
System.out.println(settInnStjerner("hello")); //Forventet resultat hel*lo
System.out.println(settInnStjerner("helllo")); //Forventet resultat hel*l*lo
System.out.println(settInnStjerner("helloo")); //Forventet resultat hel*lo*o
System.out.println(settInnStjerner("")); //Forventet resultat
System.out.println(settInnStjerner("trollmannen")); //Forventet resultat trol*lman*nen
}
public static String settInnStjerner(String str){
//din kode her
}
}