Độ sâu đệ quy tối đa phụ thuộc vào lượng bộ nhớ được sử dụng bởi (các) hàm, dung lượng bộ nhớ trên nền tảng của bạn và giới hạn (nếu có) bởi hệ điều hành hoặc trình biên dịch.
Trong một cuộc gọi đệ quy, bộ nhớ bị chiếm đóng bởi:
- Chi phí của một cuộc gọi chức năng
- Bộ nhớ bị chiếm đóng bởi các thông số thông qua.
- Bộ nhớ bị chiếm đóng bởi các biến địa phương
Một hàm đệ quy không có tham số và không có các biến địa phương sẽ có một chiều sâu có thể cao hơn (số lượng cuộc gọi đệ quy) so với một chức năng mà qua rất nhiều đối tượng lớn và chiếm một nhiều biến cục bộ. Vì vậy, câu trả lời cho câu hỏi của bạn là: số lượng tối đa các cuộc gọi đệ quy phụ thuộc vào lượng bộ nhớ bị chiếm bởi một cuộc gọi đệ quy, dung lượng bộ nhớ trên hệ thống và bất kỳ giới hạn nào được cài đặt bởi trình biên dịch hoặc hệ điều hành. Các hàm đệ quy khác nhau chiếm một lượng bộ nhớ khác nhau.
Nếu bạn biết tất cả các mục này, thì bạn có thể tính toán số lần truy cập tối đa có thể.
Nguồn
2016-03-01 18:10:11
Không có gì trong 'C++' xác định độ sâu tối đa. Độ sâu tối đa phụ thuộc vào kiến trúc CPU, chi tiết triển khai trình biên dịch cụ thể và hàm thực sự được đệ quy (cùng với các hàm con mà nó gọi).Giống như bất kỳ vấn đề khác, chắc chắn, nếu bạn biết tất cả các thông số bạn có thể xác định một giải pháp .... nhưng trong trường hợp này nó có thể dễ dàng hơn nhiều để chỉ cần thực hiện cuộc gọi rõ ràng và xem những gì bạn nhận được. – mah
Mặc dù có một đoạn trong '[temp.inst]' cho biết có một số thực hiện được xác định. – NathanOliver
Vì vậy, nếu có một cách để kiểm tra kích thước ngăn xếp miễn phí để ngăn chặn đệ quy khi nó dưới một giới hạn quy định? – Jepessen