30/09/2018, 20:03

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 ).
Xin cảm ơn các bạn nhiều

Văn Dương viết 22:17 ngày 30/09/2018

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

void Dequy(){
     Dequy();
}
Người bí ẩn viết 22:09 ngày 30/09/2018

Vãi, bạn nói thế thì mình không thể hiểu được 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!

Văn Dương viết 22:06 ngày 30/09/2018

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.

Ngô Doãn Tuấn viết 22:14 ngày 30/09/2018

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 ạ ?

Maskma viết 22:16 ngày 30/09/2018

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
Thành Phạm viết 22:06 ngày 30/09/2018

Vãi, bạn nói thế thì mình không thể hiểu được

softwareengineering.stackexchange.com
Soner Gönül

How do I explain "Recursion" to an 8-year-old kid?

recursion
asked by Soner Gönül on 07:23AM - 18 Jul 11

softwareengineering.stackexchange.com
Gulshan

In plain English, what is recursion?

recursion
asked by Gulshan on 04:07AM - 10 Dec 10

stackoverflow.com
Mike Minutillo

What is recursion and when should I use it?

recursion, computer-science
asked by Mike Minutillo on 02:29AM - 06 Aug 08

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

Văn Dương viết 22:14 ngày 30/09/2018

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.

Maskma viết 22:07 ngày 30/09/2018

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 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

Ngô Doãn Tuấn viết 22:05 ngày 30/09/2018

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 Mà em thì học cứ bỏ qua nó
Nên muốn hỏi vậy

Maskma viết 22:17 ngày 30/09/2018

How do I explain “Recursion” to a 8 years old kid?

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à

Ngô Doãn Tuấn viết 22:13 ngày 30/09/2018

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.
Nên bỏ nó lâu rồi. Giờ nghe thằng bạn nó chém thấy ghê ghê

Nguyen Ca viết 22:05 ngày 30/09/2018

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

Mai Anh Dũng viết 22:05 ngày 30/09/2018

Quảng cáo ké:

Đây là một bài viết hay được dịch bởi @breakdown. Bài viết được lấy từ sách: "C Primer Plus 6th Edition" Đệ Quy (Recursion) Hôm nay chúng ta sẽ quay lại với ĐỆ QUY. Thực chất đệ quy không phức tạp như mọi người nghĩ, đệ quy cũng chỉ là một hàm nhưng hàm này đặc biệt hơn những hàm khác. Hàm đệ quy tự gọi chính nó. Do cách thức đặc biệt này của đệ quy nên xảy ra rất nhiều vấn đề xung quanh đệ quy. Vấn đề đầu tiên mà mọi người nghĩ tới có lẽ sẽ là làm sao để hàm đệ quy này không gọi lại nó…
Nguyễn Anh Quân viết 22:17 ngày 30/09/2018

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

HK boy viết 22:05 ngày 30/09/2018

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

sycoi001 viết 22:18 ngày 30/09/2018

Đệ 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

Văn Dương viết 22:05 ngày 30/09/2018

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

明玉 viết 22:06 ngày 30/09/2018

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

Tuấn Nguyễn viết 22:04 ngày 30/09/2018

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

HK boy viết 22:10 ngày 30/09/2018

Thường thì vòng lặp nhanh hơn, nhưng còn tuỳ trường hợp, tuỳ bài toán.

Bài liên quan
0