/* Rekursjon handler om ? holde orden p? to ting: * Minst ¨Śn betingelse som garanterer at programmet p? et tidspunkt stopper (base case), slik som i en while-l?kke * De rekursive kallene danner datastrukturen Stack --> det siste som legges til, er det siste som hentes * --> Rekkef?lgen p? kallene er dermed sv?rt viktig for resultatet */ class TestRekursjon { public static void main(String[] args) { // Vi bygger et tre Person p1 = new Person("A",null, null, true); Person p2 = new Person("B",null, null, false); Person p3 = new Person("C",p1, p2, true); Person p4 = new Person("D",null, null, true); Person p5 = new Person("E",p3, p4, false); String[] gule = {"gul", "gul", "gul", "gul"}; String[] flere = {"gul", "gul", "blaa", "gul"}; tell(6); System.out.println(sjekkFarger(gule)); System.out.println(sjekkFarger(flere)); System.out.println(sjekkFargerR(gule, 0)); System.out.println(sjekkFargerR(flere, 0)); sjekkGener(p5); } public static boolean sjekkFargerR(String[] farger, int i) { if (i >= farger.length - 1) { // Vi har n?dd slutten og ingen elementer er ulike return true; //basistilfellet, vi vet at rekursjonen alltid stopper n?r vi n?r enden av lista } // Her (p? i) stopper de rekursive kallene hvis to elementer er ulike if (!farger[i].equals(farger[i+1])) { return false; } return sjekkFargerR(farger, i+1); } public static boolean sjekkFarger(String[] farger) { //iterativ versjon av metoden over int i = 0; while (i < farger.length - 1) { if (!farger[i].equals(farger[i+1])) { return false; } i++; } return true; } public static void tell(int n) { if (n < 0) { //basistilfellet return; } // Rekkef?lgen p? de p?f?lgende linjene bestemmer om vi teller opp eller ned // Slik det er n? teller vi fra 0 til n tell(n-1); System.out.println(n); } public static void sjekkGener(Person person) { // Vil printe alle i slekta som har X-genet if (person == null) { return; } if (person.harX()) { System.out.println(person.navn() + " har X."); } sjekkGener(person.forelder1()); sjekkGener(person.forelder2()); } }