A
B
C
D
F
G
E
H
K
C U TRÚC D LI U VÀ
C U TRÚC D LI U VÀ
GI I THU T (501040)
GI I THU T (501040)
Ch ng 5: Đ quiươ
Ch ng 5: Đ quiươ
ĐH Bách Khoa Tp.HCM Ch ng 5: Đ quiươ 2
Khoa Công ngh Thông tin
Khái ni m đ qui
Ki ni m (đ nh nghĩa) đ qui có dùng l i chính
nó.
Ví d : giai th a c a n là 1 n u n là 0 ho c là n nhân ế
cho giai th a c a n-1 n u n > 0 ế
Quá trình đ qui g m 2 ph n:
Tr ng h p c s (base case)ườ ơ
Tr ng h p đ qui: c g ng ti n v tr ng h p c ườ ế ườ ơ
s
Ví d trên:
Giai th a c a n là 1 n u n là 0 ế
Giai th a c a n là n * (giai th a c a n-1) n u n>0 ế
ĐH Bách Khoa Tp.HCM Ch ng 5: Đ quiươ 3
Khoa Công ngh Thông tin
Tính giai th a
Đ nh nghĩa kng đ qui:
n! = n * (n-1) * … * 1
Đ nh nghĩa đ qui:
n! = 1 n u n=0ế
n * (n-1)! n u n>0ế
Mã C++:
int factorial(int n) {
if (n==0) return 1;
else return (n * factorial(n - 1));
}
ĐH Bách Khoa Tp.HCM Ch ng 5: Đ quiươ 4
Khoa Công ngh Thông tin
Thi hành hàmnh giai th a
n=2
2*factorial(1)
factorial (2)
n=1
1*factorial(0)
factorial (1)
n=0
return 1;
factorial (0)
1
1
6
2
n=3
3*factorial(2)
factorial (3)
ĐH Bách Khoa Tp.HCM Ch ng 5: Đ quiươ 5
Khoa Công ngh Thông tin
Tr ng thái h th ng khi thi hành
hàm tính giai th a
factorial(3) factorial(3)
factorial(2)
factorial(3)
factorial(2)
factorial(1)
factorial(3)
factorial(2)
factorial(1)
factorial(0)
factorial(3)
factorial(2)
factorial(1)
factorial(3)
factorial(2)
factorial(3)
t
G i hàm
factorial(3)
G i hàm
factorial(2)
G i hàm
factorial(1)
G i hàm
factorial(0)
Tr v t
hàm
factorial(0
)
Tr v t
hàm
factorial(1
)
Tr v t
hàm
factorial(2
)
Tr v t
hàm
factorial(3
)
Stack h th ng
Th i gian h th ng
t