Es gibt beinahe unzählig verschiedenste Ansätze, um ein Programmierziel zu erreichen. Im Allgemeinen unterscheidet man zwischen iterativen und rekursiven iterativen und rekursiven Programmierstilen. Der prozedurale Stil wird in diesem Beitrag nicht behandelt, da er in modernen Programmiersprachen weniger im Vordergrund steht.
In diesem Beitrag wird der Potenzalgorithmus als Basis genommen, um den Unterschied zwischen den beiden Stilen zu verdeutlichen.
Iterative Schreibweise
Beim iterativen Programmieransatz wird ein Problem in kleinere, wiederkehrende Schritte unterteilt, die in Schleifen abgearbeitet werden.
function calculatePowerOf(number, potency) {
solution = 1;
for (i = 0 ; i < potency ; i++) {
solution *= number;
}
return solution;
}
Rekursiver Schreibstil
Beim rekursiven Ansatz wird die Lösung eines Problems so beschrieben, dass es sich selbst als Teil enthält oder mit Hilfe von sich selbst definiert ist.
function calculatePowerOf(base, exponent) {
if (exponent <= 1) {
return base;
}
return calculatePowerOf(base * base, exponent - 1);
}
Vorteilhaft daran ist eine Kürzung der Formulierung und eine Einsparung an Variabeln.
Was dagegen spricht ist die gewöhnungsbedürftige Lösungserarbeitung und in gewissen Fällen schneidet es aufgrund dessen overhead geschwindigkeitsbedingt schlechter ab.
Die wichtigsten Bestandteile eines rekursiven Ansatzes sind:
- Basisfall / Abbruchbedingung (exponent <= 1)
- Allgemeiner Fall (return calculatePowerOf(base * base, exponent – 1)
- Fortschritt (exponent – 1)
Hinweis: Zu beachten ist, dass jede rekursive Funktion iterativ beschrieben und jede iterative Funktion rekursiv beschrieben werden kann.