function besterrucksack = rucksackBacktracking(r,auswahl)
    % Einstieg für die Rekursion: wir betrachten anfänglich den
    % ersten Gegenstand aus der Auswahl.
    besterrucksack = rucksackRekursiv(r,auswahl,1);
end

function besterrucksack = rucksackRekursiv(r,auswahl,i)
    % Es wird auf jeder Rekursionebene i jeweils ein Gegenstand mit
    % dem index i aus der Auswahl betrachtet. Dafür werden 2 Rucksäcke
    % gepackt: einer ohne den und einer mit dem Gegenstand.
    r1 = r;
    r2 = copy(r);
    if i <= length(auswahl)
        r1 = rucksackRekursiv(r1,auswahl,i+1);
        r2.gegenstandEinpacken(auswahl(i));
        r2 = rucksackRekursiv(r2,auswahl,i+1);
        % Durch den rekursiven Aufruf werden so systematisch alle 
        % möglichen Rucksäcke erzeugt.
    end
    % Am Ende wird durch jeweisl paarweises Vergleichen der insgesamt
    % beste Rucksack zurückgegeben.
    if r2.gesamtnutzen > r1.gesamtnutzen
        besterrucksack = r2;
    else
        besterrucksack = r1;
    end
end