You are on page 1of 12

ĐỆ QUY VÀ

VÒNG LẶP

University of Technology and Engineering


Vietnam National University Hanoi

1
Đệ quy và vòng lặp
➢Đệ quy
➢So sánh đệ quy và vòng lặp

https://techmaster.vn/posts/35006/khai-niem-de-quy-voi-java

2
Đệ quy là gì
búp bê Matryoshka

phương thức là tập hợp các lệnh với tham số truyền


vào để máy tính thao tác lệnh theo ý muốn của người
viết, đệ quy xảy ra khi người viết các phương thức tự
gọi (hoạc định nghĩa lại) chính nó.
3
➢ Giải thích:
➢ Bạn truyền một tham số n vào phương thức sum(), lệnh trong
phương thức sum sẽ trả về tham số n bạn truyền vào khi chạy
hết chương trình “return n”.
➢ Để đến được bước đó, chương trình sẽ chạy qua các lệnh
điều kiện “if(n>=1)” để định nghĩa lại phương thức sum một
lần nữa “sum(n-1) + n”, phương thức mới sẽ khiến giá trị n sẽ
thay đổi theo từng vòng của điều kiện cho đến khi không còn
thỏa mãn điều kiện được cho.
➢ Khi chương trình “return n” thì n chính là giá trị đã được tính ở
phương thức ta đặt điều kiện bên trên.
➢ 4
➢ Như vậy, hai yếu tố cần để tiến hành một
phương thức đệ quy là:
➢ Có điều kiện dừng: Xác định quy luật của
phương thức và tìm giá trị cụ thể khi thỏa
mãn một điều kiện nhất định, ở bước này
vẫn chưa có phương thức đệ quy nào được
gọi.
➢ Phương thức đệ quy: Phương thức đệ
quy sẽ gọi lại chính nó cho đến khi nó trả về
điều kiện dừng ở bước 1. 5
Đệ quy đuôi và đệ quy đầu
Chúng ta gọi là đệ quy đuôi khi phương thức đệ quy
được đặt ở cuối, sau khi chương trình chạy qua điều
kiện dừng. Còn lại thì ta gọi đó là đệ quy đầu. Ví dụ,
phương thức ở phần 2 là đệ quy đầu, giờ hãy cùng
tiếp tục biến đổi một chút và ta có phương thức đệ
quy đuôi tính lũy tiến từ currentSum đến n:

6
➢ Như vậy với phương thức đệ quy đuôi,
phương thức đệ quy sẽ được chương trình
ưu tiên xử lý dứt điểm. Chương trình sẽ
không phải chạy nhiều vòng xử lý điều
kiện như phương thức đệ quy đầu, nên
theo logic, nguy cơ tràn bộ nhớ Stack sẽ
được giảm thiểu.

7
So sánh giữa đệ quy và vòng
lặp

8
Ưu điểm lớn nhất của phép đệ quy là tiếp cận
xử lý vấn đề bằng những đoạn code sạch, gọn
gàng, dễ đọc, dễ hiểu. Nhược điểm rõ ràng là
nguy cơ cao tràn bộ nhớ Stack như đã giải
thích ở trên.
Dù vòng lặp có một ưu điểm là chỉ có một
vòng duy nhất được gọi ra và ta sẽ không phải
lo nghĩ gì về vấn đề tràn bộ nhớ Stack. Nhưng
vòng lặp cũng có một nhược điểm so với đệ
quy là code xử lý sẽ viết dài và phức tạp hơn. 9
Bài tập 1

Nhập giá trị n và tìm đơn vị của 10n

10
Bài tập 2

➢Dãy Fibonacci và đệ quy


➢Tìm số Fibonacci tương ứng với số
thứ tự n

11
Bài tập 3

➢Biểu diễn số thập phân dưới dạng


nhị phân với đệ quy

12

You might also like