Changes between Version 22 and Version 23 of Skript/2. Java/ 7. Rekursion


Ignore:
Timestamp:
Dec 12, 2017, 9:50:29 AM (7 years ago)
Author:
tracadmin
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Skript/2. Java/ 7. Rekursion

    v22 v23  
    173173}
    174174}}}
     175
     176== Rekursion auf Arrays ==
     177Bei der Rekursion auf Arrays wird ein Array als Parameter der rekursiven Methode verwendet. Die Verkleinerung des Problems erfolgt dadurch, dass in der Methode eine Operation mit der ersten (oder ggf. letzten) Zelle des Arrays durchgeführt wird und die Methode mit dem Rest des Arrays (das Array ohne die bereits bearbeitete Zelle) rekursiv aufgerufen wird. Rekursionsende ist, wenn alle Zellen des Arrays bearbeitet wurden.
     178
     179Dieser Mechanismus lässt sich auf zwei verschiedene Arten implementieren: Entweder liefert man stets den Index der aktuellen Zelle als zusätzlichen Parameter mit, oder man liefert stets eine um die aktuelle Zelle verkleinerte Kopie des Arrays mit.
     180
     181Der Nachteil der ersten Variante ist, dass man eine Wrapper-Methode benötigt, um den zusätzlichen Parameter zu verstecken, der Nachteil der zweiten Variante ist, dass stets eine Kopie des Arrays erzeugt werden muss, was eine teure Operation ist.
     182
     183{{{
     184#!java
     185// mit Wrapper, Übergabe eines zusätzlichen Parameters
     186        public static int summeRekursiv(int[] a, int pos) {
     187                if (pos == a.length - 1) {
     188                        return a[pos];
     189                }
     190                return a[pos] + summeRekursiv(a, pos + 1);
     191        }
     192       
     193// Wrappermethode für summeRekursiv
     194        public static int summe(int[] a) {
     195                return summeRekursiv(a, 0);
     196        }
     197       
     198// ohne Wrapper, mit Kopie des Arrays
     199        public static int summe2(int[] a) {
     200                if (a.length == 0) {
     201                        return 0;
     202                }
     203                return a[0] + summe2(Arrays.copyOfRange(a, 1, a.length));
     204        }
     205
     206}}}