Załóżmy, że mam rozwiązanie rekursywne, a także iteracyjne (używając stosu) do jakiegoś problemu, np. preorder traversal drzewa binarnego. Z obecnymi komputerami, pod kątem pamięci, czy istnieje korzyść z zastosowania rozwiązania rekursywnego w iteracyjnej wersji lub odwrotnie dla bardzo dużych drzew?Rekursja vs iteracja w odniesieniu do użycia pamięci
Jestem świadomy, że w przypadku niektórych rozwiązań rekursywnych, w których powtarzają się problemy podrzędne, dodatkowe koszty związane z pamięcią i pamięcią mają miejsce w przypadku rekursji. Załóżmy, że tak nie jest w tym przypadku. Na przykład,
preOrder(Node n){
if (n == null) return;
print(n);
preOrder(n.left);
preOrder(n.right);
}
vs
preOrder(Node n){
stack s;
s.push(n);
while(!s.empty()){
Node node = s.pop();
print(node);
s.push(node.right);
s.push(node.left);
}
}
Czy 'wizyta' ma być 'preOrder'? –
Dzięki za zwrócenie na to uwagi. –
Jedna myśl może być taka, że podczas korzystania z rekursji pamięć zawsze będzie na stosie. W przypadku iteracji możesz zdecydować o przydzieleniu go w stercie. –