Giả sử tôi có một đệ quy cũng như một giải pháp lặp lại (sử dụng ngăn xếp) cho một số vấn đề, ví dụ: đặt trước giao điểm của cây nhị phân. Với máy tính hiện tại, bộ nhớ khôn ngoan, có lợi thế nào khi sử dụng giải pháp đệ quy trên phiên bản lặp lại hoặc ngược lại cho rất lớn cây?Đệ quy vs lặp lại liên quan đến việc sử dụng bộ nhớ
Tôi biết rằng đối với một số giải pháp đệ quy trong đó các vấn đề phụ lặp lại, có thêm thời gian và chi phí bộ nhớ nếu việc đệ quy được sử dụng. Giả sử rằng đây không phải là trường hợp ở đây. Ví dụ,
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);
}
}
Có phải 'lượt truy cập' được coi là 'preOrder' không? –
Cảm ơn bạn đã lưu ý điều đó. –
Một ý nghĩ có thể là khi sử dụng đệ quy bộ nhớ sẽ luôn nằm trên ngăn xếp. Trong khi với lặp đi lặp lại bạn có thể quyết định phân bổ nó trong heap. –