Bài giảng Ngôn ngữ lập trình - Bài 9: Đệ quy

10 12 0
Bài giảng Ngôn ngữ lập trình - Bài 9: Đệ quy

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

Thông tin tài liệu

[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

Ngày đăng: 09/03/2021, 06:33

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan