Khái niệm đệ quy? Đệ quy là gì?

Xin chào các bạn. Chẳng qua là mình có học qua bài 35 của playlist C anh Đạt và có bài tập tính số thứ n của dãy fibonacci, tham khảo trên mạng thì thấy nó bảo phải dùng đệ quy gì ấy … mà mình thì không biết đệ quy là gì?
Bạn nào có clip hay nói rõ về khái niệm đệ quy và cách dùng thì up link cho mình nhé, đừng up code vì mình muốn tự viết, còn mình không biết Đệ quy là gì thôi!
Pro nào giỏi thì có thể giải thích trực tiếp luôn nhé! Không thì up link cũng được nhưng clip đó phải dễ hiểu và đầy đủ nhé! ( như mấy clip anh Đạt chẳng hạn :slight_smile: ).
Xin cảm ơn các bạn nhiều :smiley:

3 Likes

Hiểu đơn giản là hàm mà nó gọi lại chính nó.

void Dequy(){
     Dequy();
}
7 Likes

Vãi, bạn nói thế thì mình không thể hiểu được :smiley: Mình cần giải thích rõ ràng cơ mà, nếu không thích bạn có thể ip link 1 video hướng dẫn chi tiết cho mình cũng được! :smiley:

1 Like

Vãi bạn ! Nghĩ nó đơn giản hơn tý đi.
Nó là cái phương pháp viết hàm mà trong hàm đó nó sẽ gọi chính nó thôi.

2 Likes

Anh Dương ơi. Đệ quy có thật sự quan trọng với sau này không nhỉ ?
Có cần hiểu chuyên sâu về nó không ạ ?

1 Like

Ví dụ
Bạn chơi trò chơi xếp hình lego. Đầu tiên đập vào mắt bạn là cả mẫu hình hoành tráng đã hoàn thiện.
Bạn muốn lắp đc như thế nhưng nếu đổ hết các mảnh ra vun vào 1 chỗ thì nó cũng chả bh thành mặc dù đủ mảnh. Nhưng bạn ko biết bắt đầu từ đâu, thế là bài toán bắt đầu.
Bạn thấy để hoàn thiện đc cả thành phố thì cần lắp từng căn nhà, muốn lắp từng căn nhà thì lại cần lắp từng phòng, muốn lắp từng phòng thì phải lắp từng bức tường và đồ đạc.
Đến đây thì bạn thấy ko chia nhỏ ra đc nữa, bức tường và đồ đạc thường là 1 mảnh ghép đơn giản ko chia đc nữa, bạn ghép vào dần dần ngược thứ tự kể trên sau khi đã suy luận để ra đc thành phố như mong muốn.
Để ý kĩ nữa bạn thấy mỗi bước trong quá trình đều dùng từ “lắp”, ở đây ý chỉ các bước thực ra giống nhau, chỉ thay đổi sự vật từ to thành nhỏ hơn.
Vậy đệ quy là gì?
Đệ quy cũng giống như trên, gặp 1 bài toán lớn bạn thg ko giải ngay đc, nhưng thấy để giải nó bạn có thể giải các bài toán giống thế nhưng nhỏ hơn, ghép lại sẽ đc bài toán lớn. Khi đến 1 bài toán nhỏ nhất định ko thể nhỏ hơn đc nữa (Trường hợp cơ sở), bạn giải nó luôn rồi bắt đầu ghép dần lại.
Ưu nhược điểm
ở đây mình liệt kê 1 số, chưa đủ hết ưu nhược:
Ưu:

  • Dễ cài đặt, chỉ cần biết công việc cần làm gì rồi cho nó phân rã thành các bài nhỏ tự giải, tự ghép.
  • Dễ hiểu
  • Giải quyết đc những vẫn đề mà việc biết đc trường hợp cơ sở của nó là rất khó (tự cho máy đi tìm các bài toán cơ sở)
    Nhược:
  • Chậm, tốn bộ nhớ, nếu bị suy biến (đại loại là chia quá nhiều) thì “tạch”
  • Thường thì ko tối ưu, ngoài TH đặc biết mình biết là Quick sort dùng đệ quy nhưng hiệu quả về tốc độ
  • Ko tận dụng được việc sử dụng kết quả của những bài toán đã giải. 1 bài toán nhỏ thường bị giải nhiều lần (lý do chậm là đây)
    Vậy ngược lại với đệ quy là tối ưu nhất?
    ko có gì là tối ưu nhất, nhưng có những kỹ thuật ngược với đệ quy cho thấy có hiệu quả hơn.
    ví dụ: Quy hoạch động là giải các bài toán nhỏ trc, lưu lại kết quả rồi dùng nó nhiều lần để giải dần các bài toán lớn hơn.
  • Khử đệ quy: cách này thường dài và khó hiểu hơn đệ quy, mình cũng nghe thôi chưa biết nhiều về cái khử đệ quy nên thôi ko nói
13 Likes

:smile_cat:



Cái này có sub việt:

5 Likes

Nó cũng như những thuật toán bình thường khác. Có một số thể loại toán khi áp dụng đệ quy thì ngắn và đơn giản.
Còn về quan trọng thì theo ý kiến cá nhân thì nó không quan trọng và không nên dùng. Dùng đệ quy mà không kiểm soát được rất dễ bị tràn stack và sập chương trình. Ngoài đệ quy còn nhiều phương pháp khác.

Thực ra hiểu đc concept với cách cài đặt là đc thôi mà, có gì mà chuyên sâu đâu :smile: sau này tuỳ lúc nếu gặp phải vấn đề mình thấy dạng đệ quy thì lôi ra dùng. mức độ quan trọng thì chắc cũng ko cao đâu :slight_smile:

Em hiểu được cách concept với cài đặt. Tại hôm nay trùng hợp nghe thằng bạn nó cường hóa đệ quy nên kinh khủng :joy: Mà em thì học cứ bỏ qua nó :smiley:
Nên muốn hỏi vậy :smiley:

bạn ấy cường hoá chính tỏ chắc mới học đệ quy, được khai sáng thấy hay quá nên làm màu tí ấy mà :stuck_out_tongue_closed_eyes:

:joy: Em học qua lâu rồi. Đệ quy chỉ dùng cho một số bài đặc biệt và các thuật toán sắp xếp tìm kiếm.
:stuck_out_tongue: Nên bỏ nó lâu rồi. Giờ nghe thằng bạn nó chém thấy ghê ghê :stuck_out_tongue_closed_eyes:

Xem ở link ở dưới. thật ra cái này cũng hay dùng đối với những cấu trúc dữ liệu dạng tree. viết vật cả ra ấy chứ.
https://onedrive.live.com/redir?resid=A8D2376A2C7ACABB!269&authkey=!APSBUTt6DfkJGN4&ithint=file%2Cpptx

Quảng cáo ké:

4 Likes

Nghe mn nói thấy đệ quy giống kiểu chia để trị nhỉ :slight_smile:

Bạn nói ngược rồi nhé.

1 Like

Đệ quy chắc có thể là từ hán việt, đệ là thằng em nhỏ hơn, quy là quay lại.
tính từ thằng bự nhất sau đó quay lại thằng đệ kế bên nó, chừng nào đụng thằng điều kiện dừng thì thôi, do vậy nên chắc kiu là đệ quy :smile:

Quy là rùa ::))
(Cố viết cho đủ 20)

1 Like

Đệ quy là cái này: 遞歸, tức là quay về theo thứ tự.
Minh họa trực quan nhất về đệ quy :smiley:

3 Likes

cái đệ quy với vòng lặp thì cái nào nhanh hơn các bác

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