Advertisement
Guest User

Untitled

a guest
Feb 28th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. # Rekursion
  2.  
  3. * Selbstaehnlichkeit -> *Ein Verzeichnis enthaelt Dateien und andere Verzeichnisse*
  4.  
  5. ## Iteration vs. Rekursion
  6.  
  7. **Iteration**
  8.  
  9. > Wiederholend
  10.  
  11. ```java
  12.  
  13. public static int factorialIter(final int n) {
  14. int result = 1;
  15. for(int i =1; i <= n; i++) {
  16. result = result * i;
  17. }
  18.  
  19. return result;
  20. }
  21. ```
  22.  
  23. **Rekursion**
  24.  
  25. > Schwieriges Problem wird auf ein gleichartiges, aber etwas einfacheres Problem zurueckgefuehrt
  26.  
  27. => **Rekursionsvorschrift**
  28.  
  29. Wir brauchen immer eine Anfangsbedingung/Basis => **Rekursionsbasis**
  30.  
  31. ```java
  32.  
  33. public static int factorialRec(final int n) {
  34. if((n == 0) || (n == 1)) { // Rekursionsbasis
  35. return 1; // Rekursionsbasis
  36. }
  37. else { // Rekursionsvorschrift
  38. return (n * factorialRec(n - 1)); // Rekursionsvorschrift
  39. }
  40. }
  41. ```
  42.  
  43. Note: Die Bedingung fuer die Basis und Vorschrift gehoert explizit zur Begruendung!
  44.  
  45. Die Method ruft sich immer wieder selber auf, um auf das Endergebnis zu gelangen.
  46.  
  47. Auch *wiederholend* aber implizit *rekursiv*.
  48.  
  49. ## Call Stack
  50.  
  51. * Heap: Speicherbereich in dem Objekte gespeicher werden. Nicht mehr referenzierbare Objekte werden durch den GC geloescht
  52. * Call Stack: Speicherbereich fuer aktuelle Methodenparameter und lokale Variablen. Pro Methodenaufruf wird ein Stack Frame angelegt und wieder geloescht nach Methodenabarbeitung.
  53.  
  54. ## Maechtigkeit der Rekursion
  55.  
  56. Rekursion und Iteration sind gleich maechtig! Probleme koennen mit beiden Methoden geloest werden.
  57.  
  58. ### Motivation fuer die Rekursion
  59.  
  60. * maechtiges Loesungskonzept
  61. * haeufig einfache und elegante Problemloesungen
  62. * weniger Quellcode
  63. * Korrektheit haeufig einfacher zu zeigen
  64. * Gewisse Programmiersprachen, wie List oder Prolog kennen nur Rekursionen
  65.  
  66. ### Tuecken der Rekursion
  67.  
  68. * schnell sehr viele Methodenaufrufe
  69. * tendenziell langsamere Programmausfuehrung
  70. * grosser Speicherbedarf auf dem call Stack
  71. * Gefahr eines Stack Overflows!
  72.  
  73. ## Rekursions Typen
  74.  
  75. **Lineare Rekursion**
  76.  
  77. Die Ausfuehrung der Methode `m(...)` fuehrt zu **hoechstens einem** rekursiven Aufruf (Fakultaet)
  78.  
  79. **Nichtlineare Rekursion**
  80.  
  81. Die Ausfuehrung der Methode `m(...)` fuehrt zu **mehr als einem** rekursiven Aufruf.
  82.  
  83. * Nicht geschachtelt (**primitiv rekursiv**) -> `m(...)` -> `m(...), m(...)`
  84. * Geschachtelt (**nicht primitiv rekursiv**) -> `m(...)` -> `m(m(...)...)` (*Ackermann-Funktion*)
  85.  
  86. **Direkte Rekursion**
  87.  
  88. Eine rek. Methode ruft sich **direkt** selbst auf
  89.  
  90. **Indirekte Rekursion**
  91.  
  92. Eine rek. Methode ruft sich **indirekt** selber auf. (ueber eine andere Methode)
  93.  
  94. ```java
  95. FUCK
  96. ```
  97.  
  98. ## Permute
  99. Durchprobieren aller Moeglichkeiten
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement