Tải bản đầy đủ (.pptx) (97 trang)

Chương: Dequy potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (780.54 KB, 97 trang )

Đệ quy
Phạm Thi Vương
6/27/14 Nhập môn CTDL và Thuật toán 2
Ñeä quy?

Một khái niệm X gọi là định nghĩa theo đệ qui nếu trong chính định
nghĩa X có sử dụng khái niệm X
Ví dụ:
1. Định nghĩa Số tự nhiên:

0 là một số tự nhiên

n > 0 là số tự nhiên nếu n – 1 là số tự nhiên
2. Định nghĩa n giai thừa

0! = 1

Nếu n >0 thì n! = n* (n-1)!
6/27/14 Nhập mơn CTDL và Thuật tốn 3
Đệ quy?

Đưa bài toán hiện tại về một bài toán cùng loại, cùng tính chất (đồng dạng)
nhưng ở cấp độ thấp hơn, quá trình này tiếp tục cho đến khi bài toán đưa về
cấp độ có thể giải được.

Đệ quy là kỹ thuật giải quyết vấn đề bằng cách giải quyết vấn đề nhỏ hơn
cùng loại.
6/27/14 Nhập môn CTDL và Thuật toán 4
Ví dụ
1 if n = 0
n!=


(n-1)!*n if n > 0
1 if n = 0
n!=
1*2*3*…*(n-1)*n if n > 0

Định nghĩa số Số tự nhiên
- 0 là một số tự nhiên.
- n là số tự nhiên nếu n - 1 là số tự nhiên.
6/27/14 Nhập môn CTDL và Thuật toán 5
Cấu trúc chương trình
Chương trình đệ qui gồm hai phần chính:
1. Phần cơ sở: Điều kiện thoát khỏi đệ qui
2. Phần đệ quy: Trong phần thân chương trình có lời gọi đến chính bản thân
chương trình với giá trị mới của tham số nhỏ hơn giá trị ban đầu
6/27/14 Nhập môn CTDL và Thuật toán 6
Tính giai thöøa
int Fact(int n)
{
if (n==0) // c sơ ở
return 1;
else
return n * Fact (n-1);
}
6/27/14 Nhập môn CTDL và Thuật toán 7
Minh họa
Gọi hàm answer <- Fact(5)
CT chính: Chưa xong: answer <- Fact (5)
6/27/14 Nhập môn CTDL và Thuật toán 8
Minh họa
CT chính: Chưa xong: answer <- Fact (5)

Fact. 1st: N=5, Chưa xong: 5*Fact(4)
6/27/14 Nhập môn CTDL và Thuật toán 9
Minh họa
CT chính: Chưa xong: answer <- Fact (5)
Fact. 1st: N=5, Chưa xong: 5*Fact(4)
Fact. 2nd: N=4, Chưa xong: 4*Fact(3)
6/27/14 Nhập môn CTDL và Thuật toán 10
Minh họa
CT chính: Chưa xong: answer <- Fact (5)
Fact. 1st: N=5, Chưa xong: 5*Fact(4)
Fact. 2nd: N=4, Chưa xong: 4*Fact(3)
Fact. 3rd: N=3, Chưa xong: 3*Fact(2)
6/27/14 Nhập môn CTDL và Thuật toán 11
Minh họa
CT chính: Chưa xong: answer <- Fact (5)
Fact. 1st: N=5, Chưa xong: 5*Fact(4)
Fact. 2nd: N=4, Chưa xong: 4*Fact(3)
Fact. 3rd: N=3, Chưa xong: 3*Fact(2)
Fact. 4th: N=2, Chưa xong: 2*Fact(1)
6/27/14 Nhập môn CTDL và Thuật toán 12
Minh họa
CT chính: Chưa xong: answer <- Fact (5)
Fact. 1st: N=5, Chưa xong: 5*Fact(4)
Fact. 2nd: N=4, Chưa xong: 4*Fact(3)
Fact. 3rd: N=3, Chưa xong: 3*Fact(2)
Fact. 4th: N=2, Chưa xong: 2*Fact(1)
Fact. 5th: N=1, Chưa xong: 1*Fact(0)
6/27/14 Nhập môn CTDL và Thuật toán 13
Minh họa
CT chính: Chưa xong: answer <- Fact (5)

Fact. 1st: N=5, Chưa xong: 5*Fact(4)
Fact. 2nd: N=4, Chưa xong: 4*Fact(3)
Fact. 3rd: N=3, Chưa xong: 3*Fact(2)
Fact. 4th: N=2, Chưa xong: 2*Fact(1)
Fact. 5th: N=1, Chưa xong: 1*Fact(0)
Fact. 6th: N=0, xong: returns 1
6/27/14 Nhập môn CTDL và Thuật toán 14
Minh họa
CT chính: Chưa xong: answer <- Fact (5)
Fact. 1st: N=5, Chưa xong: 5*Fact(4)
Fact. 2nd: N=4, Chưa xong: 4*Fact(3)
Fact. 3rd: N=3, Chưa xong: 3*Fact(2)
Fact. 4th: N=2, Chưa xong: 2*Fact(1)
Fact. 5th: N=1, xong: returns 1*1
6/27/14 Nhập môn CTDL và Thuật toán 15
Minh họa
CT chính: Chưa xong: answer <- Fact (5)
Fact. 1st: N=5, Chưa xong: 5*Fact(4)
Fact. 2nd: N=4, Chưa xong: 4*Fact(3)
Fact. 3rd: N=3, Chưa xong: 3*Fact(2)
Fact. 4th: N=2, xong: returns 2*1
6/27/14 Nhập môn CTDL và Thuật toán 16
Minh họa
CT chính: Chưa xong: answer <- Fact (5)
Fact. 1st: N=5, Chưa xong: 5*Fact(4)
Fact. 2nd: N=4, Chưa xong: 4*Fact(3)
Fact. 3rd: N=3, xong: returns 3*2
6/27/14 Nhập môn CTDL và Thuật toán 17
Minh họa
CT chính: Chưa xong: answer <- Fact (5)

Fact. 1st: N=5, Chưa xong: 5*Fact(4)
Fact. 2nd: N=4, xong: returns 4*6
6/27/14 Nhập môn CTDL và Thuật toán 18
Minh họa
CT chính: Chưa xong: answer <- Fact (5)
Fact. 1st: N=5, xong: returns 5*24
6/27/14 Nhập môn CTDL và Thuật toán 19
Minh họa
CT chính: xong: answer <- 120
6/27/14 Nhập mơn CTDL và Thuật tốn 20
Tính giai thừa không đệ quy

Dùng vòng lặp
int Fact (int n)
{
int fact = 1;

for(int count = 2; count <= n; count++)
fact = fact * count;

return fact;
}
6/27/14 Nhập môn CTDL và Thuật toán 21
Luõy thöøa
6/27/14 Nhập môn CTDL và Thuật toán 22
Luõy thöøa

Tính x
p


Giả sử p > 0

Không dùng đệ quy:
long power (int x, int p)
{
long result = x;
for (int i=1; i<p; i++)
result *= x;
return result;
}
6/27/14 Nhập môn CTDL và Thuật toán 23
Luõy thöøa

x
p
= x * x
p-1

long Power(int x, int p)
{
if (p == 1)
return x;
else
return x * Power (x, p - 1);
}
6/27/14 Nhập môn CTDL và Thuật toán 24
Activations Stack Example
Algo: total <- Power(3,4)
Power base = 3 exp = 4 3 *Power(3,3)
Power base = 3 exp = 3 3 *Power(3,2)

Power base = 3 exp = 2 3 *Power(3,1)
Power base = 3 exp = 1 3 *Power(3,0)
Power base = 3 exp = 0 xong: 1
Total <- 81
1
3
9
27
1
3
9
27
81
6/27/14 Nhập môn CTDL và Thuật toán 25
Luõy thöøa

Chú ý x
p
= x
p/2
* x
p/2
nếu p chẵn
x
p
= x
p/2
* x
p/2
* x nếu p lẻ

long powerR2 (int x, int p)
{
if (p == 1) return x;
else {
long z = powerR2 (x, p / 2);
if (p % 2 == 0) return z * z;
return z * z * x;
}
}

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×