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 30 0

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

THÔNG TIN TÀI LIỆU

 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]

(1)

Lecturer: PhD Ngo Huu Phuc Tel: 0438 326 077 Mob: 098 5696 580

Email: ngohuuphuc76@gmail.com

Cấu trúc liệu giải thuật

(2)

 Khái niệm đệ quy.

 Ví dụ đệ quy.

 Đệ quy (Tail Recursion)

 Bài tốn tháp Hanoi.

Tham khảo:

(3)

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

 Với phần lập trình viên, để giải tốn lớn, có

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

 Ta nói một đối tượng đệ qui đối tượng bao

gồm phận đối tượng

(4)

 Trong tính tốn, để giải vấn đề sử dụng hàm đệ quy

(hàm gọi với tham số thay đổi)

 Như vậy, hàm đệ quy hàm gọi lại

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

(5)

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

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

• Giai thừa n viết: n!, tích phần tử từ n đến • Ví dụ, 5! = (5)(4)(3)(2)(1)

• Có thể thực tính giai thừa 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, cơng thức

tính giai thừa viết dạng:

(6)

thừa nhỏ

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

• Ta xử lý (n - 1)! giống n!, với tham số nhỏ • Ta có, (n - 1)! = (n – 1) * (n - 2)!,

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

• Với cách tiếp cận dạng đệ quy, định nghĩa lại cách

(7)

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

 Có thể hình dung đệ quy qua bước chính:

quay xi (winding) quay ngược (unwinding)

 Tại bước winding, lời giải tốn gọi lại nó.

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

điều kiện dừng

 Điều kiện dừng thơng thường định nghĩa

bước đến tốn sở, giải trực tiếp

 Với hàm đệ quy cần có điều kiện

(8)

được thực hiện, toán nhỏ xem

xét theo thứ tự ngược lại

 Bước dừng lại trình đến tốn gốc Q

(9)

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

Bước Winding

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

Bước UnWinding

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

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

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

(10)

#include<conio.h>

long factorial(int);

void main()

{

int n;

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;

else return n*factorial(n-1);

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

Xem thêm:

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN