Giới thiệu về đệ quy
Thuộc phần Logic và luồng điều khiển trong hành trình Dart của Coddy. Bài học 47 trên 65.
Đệ quy là một kỹ thuật lập trình trong đó một hàm (function) tự gọi chính nó để giải quyết vấn đề. Hãy hình dung như khi bạn nhìn vào hai chiếc gương đặt đối diện nhau: mỗi hình phản chiếu đều chứa một phiên bản nhỏ hơn của cùng một hình ảnh, tạo thành một vòng lặp vô hạn cho đến khi các hình phản chiếu nhỏ đến mức không thể nhìn thấy.
Mọi hàm đệ quy đều cần hai thành phần thiết yếu để hoạt động đúng cách. Trường hợp cơ sở là điều kiện dừng đệ quy, giống như điểm mà những hình ảnh phản chiếu trong gương trở nên quá nhỏ để còn quan trọng. Nếu không có trường hợp cơ sở, hàm sẽ tự gọi chính nó mãi mãi, cuối cùng khiến chương trình gặp sự cố.
Bước đệ quy là nơi hàm gọi chính nó với một phiên bản đã thay đổi của bài toán ban đầu. Mỗi lần hàm gọi chính nó, hàm nên xử lý một phiên bản nhỏ hơn hoặc đơn giản hơn của bài toán, dần tiến đến trường hợp cơ sở.
Hãy tưởng tượng bạn đang tìm chìa khóa trong một chồng giấy tờ. Bạn có thể kiểm tra tờ giấy trên cùng, nếu không thấy chìa khóa ở đó, bạn sẽ làm tương tự với phần giấy tờ còn lại, lúc này ít hơn một tờ. Bạn sẽ tiếp tục lặp lại quá trình này cho đến khi tìm thấy chìa khóa hoặc không còn tờ giấy nào để kiểm tra.
Cách tiếp cận chia một vấn đề lớn thành những vấn đề nhỏ hơn giống hệt nhau giúp đệ quy trở nên hữu ích khi giải một số dạng thử thách lập trình.
Tự làm thử
Bài học này không có thử thách code.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng điều khiển
1Thao tác nâng cao với danh sách
Thuộc tính danh sách: đầu và cuốiTrạng thái danh sách: isEmpty và isNotEmpĐảo ngược danh sáchThêm vào danh sách: insertXóa khỏi danh sách: removeWhereTìm trong danh sách: indexOfSắp xếp danh sáchXáo trộn danh sáchÔn tập: trình sắp xếp danh sách4Thao tác nâng cao với Map
Duyệt qua MapKiểm tra khóa và giá trịCác thuộc tính của Map: khóa và giá trịThêm có điều kiện: putIfAbsentXóa mục khỏi MapMap lồng nhauÔn tập: Cập nhật kho hàng7Hàm nâng cao
Hàm ẩn danhTruyền hàm làm đối sốTìm hiểu về bao đóngGiới thiệu về đệ quyHàm đệ quy: Đếm ngượcHàm đệ quy: Giai thừaÔn tập: Bộ xử lý danh sách2Thao tác hàm trên danh sách
Biến đổi bằng 'map'Lọc bằng 'where'Dùng '.toList()'Kiểm tra điều kiện bằng 'any'Điều kiện với 'every'Tìm phần tử bằng 'firstWhere'Ôn tập: lọc dữ liệu5Dự án: Tính tiền giỏ hàng
Thiết lập dự ánThêm mặt hàng vào giỏ8Dự án: Trình phân tích văn bản đơn giản
Tổng quan và thiết lập dự ánĐếm ký tự3Tập hợp
Tập hợp là gì?Tạo tập hợpThêm và xóa phần tử khỏi tập hợpKiểm tra phần tử trong tập hợpChuyển danh sách thành tập hợpPhép hợp của các tập hợpPhép giao của các tập hợpPhép hiệu của các tập hợpÔn tập: danh sách khách mời không trùng lặpTự luyện tập: Trình biên dịch Dart online