1. Trang chủ
  2. » Cao đẳng - Đại học

Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 3: Đệ quy (Recursion)

10 31 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 364,29 KB

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

Nội dung

 V ới phần lập trình viên, để giải quyết bài toán lớn, có.. th ể sử dụng 1 quá trình dạng đệ quy.[r]

Trang 1

Lecturer: PhD Ngo Huu Phuc

Tel: 0438 326 077 Mob: 098 5696 580

C ấu trúc dữ liệu và giải thuật

Bài 3 Đệ quy (Recursion)

Trang 2

 Khái ni ệm về đệ quy.

 Ví d ụ về đệ quy.

 Đệ quy đuôi (Tail Recursion)

 Bài toán tháp Hanoi.

Tham kh ảo:

1. Kyle Loudon – Mastering Algorithms with C

Trang 3

3.1 Khái ni ệm về đệ quy (1/6)

 V ới phần lập trình viên, để giải quyết bài toán lớn, có

th ể sử dụng 1 quá trình dạng đệ quy.

 Ta nói m ột đối tượng là đệ qui nếu đối tượng này bao

g ồm chính nó như một bộ phận hoặc đối tượng được định nghĩa dưới dạng của chính nó.

Trang 4

 Trong tính toán, để giải quyết vấn đề sử dụng hàm đệ quy (hàm gọi chính nó với tham số thay đổi)

 Như vậy, hàm đệ quy là hàm gọi lại chính nó

 Với mỗi bước, hàm thay đổi thông tin đầu vào và cho kết

quả ngày càng gần với mục tiêu của bài toán

Trang 5

3.1 Khái ni ệm về đệ quy (3/6)

• Giả sử cần tính giai thừa của một số nguyên dương n

• Giai thừa của n được viết: n!, tích các phần tử từ n đến 1

• Ví dụ, 5! = (5)(4)(3)(2)(1)

• Có thể thực hiện tính giai thừa bằng vòng lặp thông thường

để tính tích

• Một cách tiếp cận khác, sử dụng đệ quy, khi đó công thức tính giai thừa được viết dạng:

n! = (n)(n - 1)(n - 2) (1)

Trang 6

thừa nhỏ hơn

• Như vậy, ta có n! = n * (n – 1)!

• Ta xử lý (n - 1)! giống như n!, với tham số nhỏ hơn.

• Ta có, (n - 1)! = (n – 1) * (n - 2)!,

Tương tự, (n - 2)! = (n – 2) * (n - 3)!, quá trình trên kết thúc

khi n=1

• Với cách tiếp cận dạng đệ quy, có thể định nghĩa lại cách tính giai thừa dạng:

Trang 7

3.1 Khái ni ệm về đệ quy (5/6)

( unwinding )

 T ại bước winding , l ời giải bài toán gọi lại chính

nó.

 Với bước winding, lời gọi chính nó dừng khi thỏa mãn

điều kiện dừng

 Điều kiện dừng thông thường được định nghĩa là tại

bước đó đã đến bài toán cơ sở, có thể giải trực tiếp được

 Với mỗi hàm đệ quy cần có ít nhất một điều kiện

dừng, nếu không sẽ lặp vô hạn

Trang 8

được thực hiện, các bài toán nhỏ trên được xem xét theo th ứ tự ngược lại

 Bước này dừng lại khi quá trình đến bài toán gốc Quá trình đệ quy kết thúc

Trang 9

3.2 Ví d ụ về đệ quy (1/6)

Bước Winding

F(4) = 4 * F(3)

F(3) = 3 * F(2)

F(2) = 2 * F(1)

F(1) = 1

Bước UnWinding

F(4) = 4 * 6 = 24 F(3) = 3 * 2 = 6 F(2) = 2 * 1 = 2 F(1) = 1

Ví d ụ 1: Tính n!.

F(n) = n* F(n-1) nếu n > 1

F(n) = 1 nếu n = 1 hoặc n = 0

Tính F(4) = ?

Trang 10

# include <conio.h>

long factorial( int );

{

printf("Nhap vao mot so: ");

scanf("%d",&n);

printf("Gia tri cua giai thua:

%ld",factorial(n));

getch();

}

if ((n==0)||(n==1)) return 1;

}

Ngày đăng: 10/03/2021, 16:30

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

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