Dùng danh sách liên kết trong đệ quy để thực hiện tính 10^9

em có một bài toán cần tính một số thứ 10^9. Em sử dụng cách đệ quy vì số phần tử tối đa của một array không lên đến 10^9(em khai báo array được khoảng 10000 thì hết ). Nhưng khi em test thử số thứ 11 thì bị overflow(em nghĩ là do nó lưu nhiều giá trị quá). liệu em có thể dùng danh sách liên kết cho trường hợp này không ? :smiley:

Không nên đâu, đệ quy là cần phải tránh trong mấy trường hợp tính toán nhiều. Loop nhiều quá nó bị stack overflow.

Được đấy, nhưng em tính dùng như thế nào.

1 Like

em vừa sửa lại code không dùng đệ quy nữa :smiley:
em định dùng danh sách liên kết để lưu giá trị vì bài toán của em chỉ cần gọi lại 2 giá trị trước đó kế tiếp. À, ở đây cho em hỏi luôn là khi mà mình đệ quy thì giá trị được lưu ở đâu? nó khác với lưu giá trị của biến không ?
p/s: cách em mới sửa cũng chỉ mới tính được số thứ 32000 :frowning:

1 Like

lưu trong stack, mà stack chỉ có giới hạn dung lượng thôi (tùy vào hệ điều hành). Nên khi đệ quy gọi lại hàm nhiều quá, nó bị tràn. Người ta gọi là stack overflow.

2 Likes

cảm ơn anh Đạt :smiley:
mà cho em hỏi nếu mình khai báo char a[M] thì M tối đa là bao nhiêu ?

1 Like

Phụ thuộc vào bộ nhớ tại thời điểm đó nó còn dư bao nhiêu em. Câu này phụ thuộc phần cứng + hệ điều hành. Mà anh lại ko nắm 2 cái này nên khó trả lời lắm :smiley:

P/S: Nhưng anh thử google trên mạng với câu hỏi này. Trong điều kiện không quan tâm đến phần cứng. Tức là phần cứng có thể đáp ứng được mọi nhu cầu thì tối đã sẽ tạo được một mảng với kích thước SIZE_MAX bằng với 21024-1

179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137215 bytes
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?