1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Kỹ thuật lập trình: Chương 1 - Võ Quang Hoàng Khang

47 38 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Chương 1 - Võ Quang Hoàng Khang
Tác giả Võ Quang Hoàng Khang
Trường học Trường Đại Học
Chuyên ngành Kỹ thuật lập trình
Thể loại Bài giảng
Định dạng
Số trang 47
Dung lượng 2,74 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chương 1 trang bị cho người học kiến thức cơ bản về lập trình đệ quy. Nội dung chính trong chương này gồm có: Khái niệm, thiết kế giải thuật đệ quy, cấu trúc hàm đệ quy, phân loại đệ quy, đệ quy tuyến tính, đệ quy nhị phân, đệ quy hỗ tương,... Mời các bạn cùng tham khảo.

Trang 1

Võ Quang Hoàng Khang

Trang 2

Cho S(n) = 1 + 2 + 3 + … + n

=>S(10)? S(11)?

Trang 4

Một hàm được gọi có tính đệ quy nếu trong thân của hàm đó có lệnh gọi lại chính nó.

Trang 5

B1 Tham số hoá bài toán.

dạng bài toán cùng loại nhưng có phạm vi giảiquyết nhỏ hơn theo nghĩa dần tiến đến trường hợpsuy biến

Trang 6

Hàm đệ quy gồm 2 phần:

(điểm dừng)

của tham số nhỏ hơn giá trị ban đầu

1)!

(n

-*

n

!

n

Trang 7

* 1)!

-(n

!

n

Trang 8

void NhapMang(int a[],int n)

Trang 10

//Trả về giá trị hay kết thúc công việc }

//Thực hiện các công việc (nếu có)

TenHam (<danh sách tham số>);

//Thực hiện các công việc (nếu có)

}

Trang 11

Ví dụ 1: Tính

Điều kiện dừng: S(0) = 0.

Công thức truy hồi: S(n) = S(n-1) + n.

int TongS (int n)

S( )  1  2  3   

Trang 12

1 2

6 24

120

GiaiThua(2) GiaiThua(4) GiaiThua(3)

1 n GiaiThua(1)

Trang 13

Trong thân hàm có 2 lời gọi hàm gọi lại chính nó một cách tường minh.

<Kiểu dữ liệu > TenHam (<danh sách tham số>)

{

if (điều kiện dừng) {

//Trả về giá trị hay kết thúc công việc }

//Thực hiện các công việc (nếu có)

TenHam (<danh sách tham số>);

//Thực hiện các công việc (nếu có)

TenHam (<danh sách tham số>);

//Thực hiện các công việc (nếu có)

}

Trang 15

//Trả về giá trị hay kết thúc công việc }

else {

//Thực hiện một số công việc (nếu có)

TenHam (<danh sách tham số>);

} }

Trang 17

Trong thân của hàm này có lời gọi hàm đến hàm kia vàngược lại.

g()

f()

h() f()

Trang 18

<Kiểu dữ liệu > TenHam2 (<các tham số>);

<Kiểu dữ liệu > TenHam1 (<các tham số>)

{

//Thực hiện một số công việc (nếu có)

…TenHam2 (<các tham số>);

//Thực hiện một số công việc (nếu có)

}

<Kiểu dữ liệu > TenHam2 (<các tham số>)

{

//Thực hiện một số công việc (nếu có)

…TenHam1 (<các tham số>);

//Thực hiện một số công việc (nếu có)

}

Trang 20

 Thay vì sử dụng lời giải đệ quy cho một bài toán, ta có thể thay thế bằng lời giải không đệ quy (khử đệ quy) bằng

phương pháp lặp

 Ưu và khuyết điểm của đệ quy:

 Trong lập trình HẠN CHẾ viết hàm đệ quy nếu thấy không cần thiết

 Thuận lợi cho việc biểu diễn

bài toán

 Gọn (đối với chương trình)

 Có khi không được tối ưu về thời gian

 Có thể gây tốn bộ nhớ

20

Trang 21

Ví dụ 1: Vi trùng cứ 1 giờ lại nhân đôi Vậy sau 5 giờ sẽ cómấy con vi trùng nếu ban đầu có 2 con?

*Giải pháp: Gọi Vh là số vi trùng tại thời điểm h

Trang 22

Ví dụ 2: Gửi ngân hàng 1000 USD, lãi suất 12%/năm.

Số tiền có được sau 30 năm là bao nhiêu?

Trang 23

Ví dụ 3: Bài toán tháp Hà Nội

Chuyển một chồng n đĩa với kích thước khác nhau từ cột A sang cột C theo nguyên tắc:

 Mỗi lần chỉ chuyển 1 đĩa.

 Không được đặt đĩa lớn trên

đĩa nhỏ.

 Có thể dùng cột B làm cột

trung gian B

Trang 24

* Tham số hoá bài toán: HaNoi (n, A, B, C)

Trong đó: n: Số đĩa

A: Cọc nguồnB: Cọc trung gianC: Cọc đích

(A, B, C có kiểu ký tự)

24

Trang 25

Giải thuật đệ quy bài toán Tháp Hà Nội:

Nếu n = 1 thì chuyển đĩa từ A qua C

Thử với n=2 : + Chuyển đĩa thứ nhất từ A sang B

+ Chuyển đĩa thứ hai từ A sang C + Chuyển đĩa thứ nhất từ B sang C

Trang 26

A B C

1 đĩa

Trang 27

A B C

1 đĩa

Trang 28

A B C

2 đĩa

Trang 29

A B C

2 đĩa

Trang 30

A B C

2 đĩa

Trang 31

A B C

2 đĩa

Trang 32

A B C

N đĩa

Trang 33

A B C

N đĩa

Trang 34

A B C

N đĩa

Trang 35

Giải thuật đệ quy bài toán Tháp Hà Nội:

void HaNoi (int n, char A, char B, char C) {

if (n==1)

cout<<A<<“”<< C;

else {

HaNoi(n-1, A, C, B);

HaNoi(1, A, B, C);

HaNoi(n-1, B, A, C);

} }

Trang 36

Bài tập 1: Viết hàm đệ quy biểu diễn nhị phân của 1 số nguyên n Ví dụ: n=13  1101

36

Xuất dạng nhị phân của n:

- Nếu (n/2 > 0) thì xuất dạng nhị phân của n/2;

Trang 37

Bài tập 2: Chuyển số giây thành giờ, phút, giây.

m=n/60;

DoiGio(n%60, h, m, s);

} }

Trang 38

Bài tập 3: Tính tổng các chữ số của một số nguyên n.

Trang 39

Bài tập 4: Xuất ngược các chữ số của số nguyên n.

Trang 40

Bài tập 5: Viết hàm đệ quy in đảo ngược chuỗi X

- Trường hợp chung: + In ký tự cuối cùng của chuỗi X.

+ Lấy phần chuỗi còn lại.

- Trường hợp suy biến: Nếu chuỗi rỗng thì không làm gì cả.

Trang 41

Bài tập 6: Viết hàm đệ quy kiểm tra xem một số có phải số nguyên tố không

Trang 42

Bài tập 7: In hình tam giác sau bằng cách đệ quy

42

void InSao(int n){

Trang 43

Bài tập 8: Cho mảng a có n phần tử, tính tổng các phần tửtrong mảng bằng đệ quy

Điều kiện dừng: nếu n=0 thì sum(a,n)=0

Giải thuật chung: sum (a,n) = a[n-1] + sum(a, n-1), n>0

Trang 44

Bài tập 9: Cho mảng a có n phần tử, tìm giá trị lớn nhấttrong mảng bằng đệ quy

44

Điều kiện dừng: Mảng 1 phần tử thì trị lớn nhất là a[0]

Giải thuật chung:

Max (a,n) = a[0] , n=1

a[n-1] > Max(a, n-1)? a[n-1] : Max(a,n-1), n>1

Trang 45

1. Viết hàm đệ quy tính: xn

2. Viết hàm đệ quy đếm số lần xuất hiện của kí tự ch trong

chuỗi S

3. Viết hàm đệ quy tính giá trị phần tử thứ k của dãy số

sau: 1 2 3 6 11 20 37 68 125 … Sau đó viếtchương trình in ra màn hình n số của dãy số trên

Trang 46

viết chương trình in ra màn hình n số hạng của dãy.

dương.

nhập 3665 -> 1: 1: 5 giây

Trang 47

9. Viết hàm đệ quy xuất ngược các chữ số của số nguyên n.

Ngày đăng: 11/05/2021, 19:32

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm