Bài giảng Kỹ thuật lập trình nâng cao - Chương 7: Lập trình đệ quy - Trần Minh Thái

*Một hàm được gọi có tính đệ qui nếu trong

thân củ a hàm đócólệnh gọi lại chính nómột

cách tường minh hay tiềm ẩ n.

*Phân loại đệqui

*Đệ qui tuyến tính.

*Đệqui nhịphân.

*Đệqui phi tuyến.

*Đệqui hỗtương.

2*

•Trong thân hàm có duy nhất một lời gọi hàm gọi lại

chính nómột cách tường minh.

TenHam ()

{

if (điều kiện dừng)

{

. . .

//Trảvềgiátrịhay kết thúc công việc

}

//Thực hiện một sốcông việc (nếu có)

. . . TenHam ();

//Thực hiện một sốcông việc (nếu có)

}

 

pdf 13 trang kimcuc 6140
Bạn đang xem tài liệu "Bài giảng Kỹ thuật lập trình nâng cao - Chương 7: Lập trình đệ quy - Trần Minh Thái", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Kỹ thuật lập trình nâng cao - Chương 7: Lập trình đệ quy - Trần Minh Thái

Bài giảng Kỹ thuật lập trình nâng cao - Chương 7: Lập trình đệ quy - Trần Minh Thái
Trần Minh Thái
minhthai@itc.edu.vn
*
1
*
*Môṭ ham̀ được goị co ́ tińh đệqui nêú trong
thân cuả ham̀ đo ́co ́lêṇh goị laị chińh no ́môṭ 
caćh tường minh hay tiêm̀ ân̉.
*Phân loaị đệqui
*Đệ qui tuyêń tińh.
*Đệqui nhịphân.
*Đệqui phi tuyêń.
*Đệqui hô t̃ương.
2
*
•Trong thân ham̀ có duy nhât́ môṭ lời goị ham̀ goị laị
chińh nómôṭ caćh tường minh.
 TenHam (́)
{
if (điêù kiêṇ dừng)
{
. . .
//Trảvềgia ́trịhay kêt́ thuć công viêc̣
}
//Thực hiêṇ môṭ sốcông viêc̣ (nêú co)́
. . . TenHam (́);
//Thực hiêṇ môṭ sốcông viêc̣ (nêú co)́
}
3
Vi ́du:̣ Tińh
- Điêù kiêṇ dừng: S(0) = 0.
- Qui tăć (công thức) tińh: S(n) = S(n-1) + n.
int TongS (int n)
{
if(n==0)
return 0;
return ( TongS(n-1) + n );
}
nnS ++++= L321)(
4
*
1. Tính n!
2. In ra các ước số của số nguyên dương
3. Đếm số lượng ước số của số nguyên dương
4. Tìm ước số chung lớn nhất của 2 số nguyên
dương
5. Kiểm tra số nguyên dương n có phải là số nguyên
tố?
6. Nhập vào mảng 1 chiều số nguyên a, kích thước n
7. Xuất mảng 1 chiều số nguyên a, kích thước n
8. Tìm phần tử có giá trị x trong mảng số nguyên a,
kích thước n
5
*
Trong thân cuả ham̀ cóhai lời goị ham̀ goị laị chińh nómôṭ caćh tường
minh.
 TenHam (́)
{
if (điêù kiêṇ dừng)
{
. . .
//Trảvềgia ́trịhay kêt́ thuć công viêc̣
}
//Thực hiêṇ môṭ sốcông viêc̣ (nêú co)́
. . .TenHam (́); //Giaỉ quyêt́ vâń đềnhỏhơn
//Thực hiêṇ môṭ sốcông viêc̣ (nêú co)́
. . . TenHam (́); //Giaỉ quyêt́ vâń đềcoǹ laị
//Thực hiêṇ môṭ sốcông viêc̣ (nêú co)́
} 6
Vi ́du:̣ Tińh sốhaṇg thứn cuả daỹ Fibonaci
được điṇh nghiã như sau:
f1 = f0 =1 ;
fn = fn-1 + fn-2 ; (n>1)
Điêù kiêṇ dừng: f(0) = f(1) = 1.
long Fibonaci (int n)
{
if(n==0 || n==1)
return 1;
return Fibonaci(n-1) + Fibonaci(n-2);
}
7
*
*Trong thân cuả ham̀ co ́lời goị ham̀ goị laị chińh no ́được đăṭ bên trong voǹg 
lăp̣.
 TenHam (́)
{
for (int i = 1; i<=n; i++)
{ //Thực hiêṇ môṭ sốcông viêc̣ (nêú co)́
if (điêù kiêṇ dừng)
{ . . .
//Tra ̉vê ̀gia ́trịhay kêt́ thuć công viêc̣
}
else
{ //Thực hiêṇ môṭ sốcông viêc̣ (nêú co)́
TenHam (́); 
}
}
}
8
Vi ́du:̣ Tińh sốhaṇg thứn cuả daỹ {Xn} được điṇh nghiã
như sau:
X0 =1 ;
Xn = n2X0 + (n-1)2X1 +  + 12Xn-1 ; (n≥1)
Điêù kiêṇ dừng:X(0) = 1.
long TinhXn (int n)
{
if(n==0)
return 1;
long s = 0;
for (int i=1; i<=n; i++)
s = s + i * i * TinhXn(n-i);
return s;
}
9
*
*Trong thân cuả ham̀ naỳ co ́ lời goị ham̀ 
đêń ham̀ kia vàtrong thân cuả ham̀ kia co ́
lời goị ham̀ tới ham̀ naỳ.
10
 TenHam2 (́);
 TenHam1 (́)
{
//Thực hiêṇ môṭ sốcông viêc̣ (nêú co)́
TenHam2 (́); 
//Thực hiêṇ môṭ sốcông viêc̣ (nêú co)́
}
 TenHam2 (́)
{
//Thực hiêṇ môṭ sốcông viêc̣ (nêú co)́
TenHam1 (́); 
//Thực hiêṇ môṭ sốcông viêc̣ (nêú co)́
}
11
Vi ́du:̣ Tińh sốhaṇg thứn cuả hai daỹ {Xn}, {Yn} được điṇh nghiã như sau:
X0 =Y0 =1 ;
Xn = Xn-1 + Yn-1; (n>0)
Yn = n2Xn-1 + Yn-1; (n>0)
- Điêù kiêṇ dưǹg:X(0) = Y(0) = 1.
long TinhYn(int n);
long TinhXn (int n)
{
if(n==0)
return 1;
return TinhXn(n-1) + TinhYn(n-1);
}
long TinhYn (int n)
{
if(n==0)
return 1;
return n*n*TinhXn(n-1) + TinhYn(n-1);
}
12
*
*Ví dụ tính n! với n=5
13

File đính kèm:

  • pdfbai_giang_ky_thuat_lap_trinh_nang_cao_chuong_7_lap_trinh_de.pdf