2025-11-12 13:07:50 +01:00

2.0 KiB

Aufgabe 1

Dokumentieren Sie die Ausführung des Aufrufs binary(6), indem Sie die Auswertung aller binary-Aufrufe als eigerückte Nebenrechnungen notieren.

binary(6)
   // else
   binary(6 / 2) + (6 % 2) // wird zu binary(3) + 0

     binary(3)
       // else
       binary(3 / 2) + (3 % 2) // wird zu binary(1) + 1
          binary(1)
          // if 
          return 1

     -> binary(3) => 1 + 1
        return 11

-> binary(6) = toInt("11" + "0")

   return 110

Wie viele binary-Aufrufe werden bei der Auswertung von binary(n) in Abhängigkeit von n ausgeführt?

Bei jedem Aufruf -> n/2 bis n <= 1

tiefe = anzahl der teilungen / 2 ---> O(n) = log2(n) + 1

  • 1 durch den letzten aufruf (Rekursions Anker)

Aufgabe 2

printArray([15, 3, 22, 43]) 
  //gibt 15 aus 
  printArray([3, 22, 43]) 
         // in print Array 
         // gibt 3 aus 
         printArray([22, 43]) 
                 // gibt 22 aus 
                 printArray([43]) 
                         // gibt 43 aus 
                         // Abbruch (length == 1) 

Rekursions Anker -> array.length > 1

Rekursiver Aufruf -> printArray(Arrays.copyOfRange(arrayInput, 1, arrayInput.length))

Aufgabe 4

printArrayRev([15, 3, 22, 43]) 
  //gibt 43 aus 
  printArrayRev([15, 3, 22]) 
      //gibt 22 aus 
      printArrayRev([15, 3]) 
          //gibt 3 aus 
          printArrayRev([15]) 
              //gibt 15 aus 
              ---> Abbruch (length == 1) 

Rekursions Anker:

arrayInput.length == 1

Rekursiver Aufruf:

printArrayRev(Arrays.copyOfRange(arrayInput, 0, arrayInput.length - 1))

Aufgabe 4

sumRec([15, 3, 22, 43]) 
  = 15 + sumRec([3, 22, 43]) 
        = 15 + (3 + sumRec([22, 43])) 
               = 15 + (3 + (22 + sumRec([43]))) 
                      = 15 + (3 + (22 + (43 + sumRec([])))) // ABBRUCH return 0 
                             = 15 + (3 + (22 + (43 + 0))) 

Rekursions Anker:

arrayInput.length == 0

Rekursiver Aufruf:

sumRec(Arrays.copyOfRange(arrayInput, 1, arrayInput.length))