Bài giảng Ngôn ngữ lập trình Bài 9 Đệ quy cung cấp cho người học các kiến thức Đệ quy với hàm void, đệ quy với hàm trả về giá trị, suy nghĩ theo kiểu đệ quy. Mời các bạn cùng tham khảo nội dung chi tiết.
NGÔN NGỮ LẬP TRÌNH Bài 9: Đệ Quy Giảng viên: Lê Nguyễn Tuấn Thành Email: thanhlnt@tlu.edu.vn Bộ Môn Công Nghệ Phần Mềm – Khoa CNTT Trường Đại Học Thủy Lợi NỘI DUNG Đệ quy với hàm void Đệ quy với hàm trả giá trị Truy vết lời gọi đệ quy Đệ quy vô hạn (infinite recursion), tràn (overflows) Hàm Power() Suy nghĩ theo kiểu đệ quy Kỹ thuật thiết kế đệ quy Tìm kiếm nhị phân Bài giảng có sử dụng hình vẽ sách “Practical Debugging in C++, A Ford and T Teorey, Prentice Hall, 2002” GIỚI THIỆU VỀ ĐỆ QUY (RECURSION) Một hàm gọi Trong định nghĩa hàm đó, có lời gọi đến hàm C++ cho phép đệ quy Giống phần lớn ngôn ngữ lập trình bậc cao Có thể kỹ thuật lập trình hữu ích Có giới hạn ĐỆ QUY VỚI HÀM VOID Chia để trị (Devide and Conquer) Kỹ thuật thiết kế Chia tác vụ lớn thành tác vụ Tác vụ phiên nhỏ tác vụ gốc! Khi gọi đệ quy VÍ DỤ ĐỆ QUY VỚI HÀM VOID Xem xét tác vụ sau: Tìm kiếm giá trị danh sách Tác vụ 1: tìm kiếm nửa đầu danh sách Tác vụ 2: tìm kiếm nửa sau danh sách Các tác vụ phiên nhỏ tác vụ gốc! Khi điều xảy ra, hàm đệ quy sử dụng ĐỆ QUY VỚI HÀM VOID: SỐ THEO CHIỀU DỌC Tác vụ: hiển thị chữ số số nguyên theo chiều dọc, số dòng Ví dụ lời gọi hàm writeVertical(1234); có kết quả: SỐ THEO CHIỀU DỌC ĐỊNH NGHĨA HÀM ĐỆ QUY Chia vấn đề thành trường hợp Trường hợp đơn giản/cơ sở: if n=10, có tác vụ con: Đơn giản in số n hình Hiển thị theo chiều dọc tất chữ số trừ chữ số cuối Hiển thị chữ số cuối Ví dụ: với tham số 1234 Tác vụ 1: hiển thị 1,2,3 theo chiều dọc Tác vụ 2: hiển thị chữ số ĐỊNH NGHĨA HÀM WRITEVERTICAL() Xét trường hợp slide trước void writeVertical(int n) { if (n < 10) // Trường hợp sở cout