Der von einem rekursiven Algorithmus benötigte Speicherplatz kann durch drei Elemente angenähert werden. Raum
- rekursive Stapel
- Parameter zu speichern, benötigen Sie fließen in die Funktion
- Ausgang einer Funktion
Im Beispiel eines faktoriellen. Rekursive Formel ist T(n) = T(n-1) + c
. Beim Abrollen erhalten Sie T(n) = T(n-1) + T(n-2) + ... + n c
. So erfordert rekursiver Stapel O(n)
Speicherplatz.
Die Ausgabe einer Funktion wird n!
sein, um eine Nummer n
zu speichern, benötigen Sie Log (n) Bits. Um das Ergebnis zu speichern, benötigen Sie log(n!) = O(n log n)
Speicherplatz.
Bei jedem Schritt Ihrer Rekursion müssen Sie 1 Parameter speichern (n
). Sie müssen es n
mal speichern, und jeder Parameter dauert log(n)
Speicherplatz. Also insgesamt O(nlogn)
Sie endete also mit O(n) + O(nlogn) + O(nlogn) = O(nlogn)
. So viel Platz wird benötigt, um die Rekursion der Fakultät zu berechnen.
Doing diese Analyse können Sie finden, warum genau Schach-Programme, die alpa-Beta Beschneidung tun viel RAM erfordert richtig Positionen zu berechnen.
Nun werden Sie rekursiv es n-mal anrufen müssen, wird jeder Anruf einen eigenen Rahmen zuweisen auf Stapel mit lokalen Variablen, so Raumkomplexität ist die Reihenfolge von n. – Evk
Jeder Aufruf der Funktion "factorial" erzeugt einen Stack-Frame im Stack-Teil des Speichers für diesen Aufruf.Ein einzelner Stack-Frame enthält die in dieser Funktion definierten Variablen, die Parameter in der Funktion und die Rückgabeadresse. In diesem Fall kann diese Information für jeden Anruf in konstanter Zeit gespeichert werden. Da es eine lineare Anzahl von Aufrufen für diese Funktion geben wird, ist der Gesamtspeicher O (n). – Shubham