[r]
(1)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
(2)Nội dung
2
Đệ quy với hàm void
Truy vết lời gọi đệ quy
Đệ quy vô hạn (infinite recursion), tràn
(overflows)
Đệ quy với hàm trả về giá trị
Hàm Power()
Suy nghĩ theo kiểu đệ quy
Kỹ thuật thiết kế đệ quy Tìm kiếm nhị phân
(3)(4)Giới thiệu về đệ quy (recursion)
4
Một hàm gọi nó
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
(5) 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!
(6)Ví dụ Đệ quy với hàm void
6
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
(7) 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ả: 1
(8)định nghĩa hàm đệ quy
8
Chia vấn đề thành trường hợp
Trường hợp đơn giản/cơ sở: if n<10
Đơn giản in số n hình
Trường hợp đệ quy: if n>=10, có tác vụ con:
1 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
(9) Xét trường hợp slide trước void writeVertical(int n)
{
if (n < 10) // Trường hợp cơ sở
cout << n << endl; else
{ // Bước đệ quy
writeVertical(n/10);
cout << (n%10) << endl; }
(10)Truy vết hàm writeVertical()
10
Ví dụ lời gọi: writeVertical(123);
writeVertical(12); (123/10)
writeVertical(1); (12/10)
cout << << endl; cout << << endl;
cout << << endl;
Mũi tên định tác vụ hàm thực