TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
KHOA CÔNG NGHỆ THƠNG TIN
BỘ MƠN CƠNG NGHỆ PHẦN MỀM
HỆ CHÍNH QUI
MƠN: NHẬP MƠN LẬP TRÌNH
GVLT: ThS. PHẠM MINH TUẤN
HDTH TUẦN 10
PHẠM TÚ SAN
TRẦN NGỌC HIỆU
TP.HCM, tháng 01 năm 2013
ptsan/
1 Mục tiêu
Lập trình đệ quy
2 Nội dung
Một hàm được gọi là đệ quy nếu bên trong thân của hàm đó có lời gọi hàm lại chính nó
một cách tường minh hay tiềm ẩn
Khi viết hàm đệ quy, cần xác định:
-
Điều kiện dừng
Cơng thức đệ quy
Ví dụ:
Tính tổng S(n) = 1 + 2 + … + n
Ta có
S(n) = (1 + 2 + … + n-1) + n
hay
S(n) = S(n-1) + n
(cơng thức đệ quy)
S(0) = 0
(điều kiện dừng)
Ta có chương trình tương ứng với cơng thức đệ quy trên như sau:
int Tong(int n )
{
if (n == 0)
return 0;
return Tong(n-1) + n;
}
Mã nguồn minh họa
#include <stdio.h>
int Tong(int* a, int n)
Trang 2
ptsan/
{
if ( n == 0)
return a[0];
return Tong(a, n-1) + a[n];
}
void main()
{
int n;
printf("Nhap n: ");
scanf("%d", &n);
int a[100];
for (int i = 0; i < n; i++)
{
printf("Nhap a[%d] = ",i);
scanf("%d",&a[i]);
}
printf("%d\n",Tong(a, n-1));
}
3 Bài tập
1. Nhập một mảng gồm N số nguyên. Sử dụng đệ quy tính tổng N số ngun đó.
Nhập: [1, 5, 0, 6] Xuất: S = 12
2. Nhập một mảng gồm số N số nguyên. Sử dụng đệ quy kiểm tra xem có phải là
mảng tăng dần. Nhập: [0, 1, 5, 6] Xuất: Tăng dần
3. Nhập n. Tính S x
x3 x5
x 2 n1
n
... 1
3! 5!
2n 1!
4. Cho n số tự nhiên x1, x2,…, xn. Hãy tìm UCLN (x1, x2,…,xn) bằng cách sử dụng:
UCLN(x1,x2,…,xn)= UCLN(UCLN(x1,x2,…,x(n-1)),xn)
5.
Bài toán mã đi tuần hoặc bài toán 8 quân hậu
6. Tìm tất cả các hốn vị của một mảng có n phần tử
7. Dãy Fibonacci
Trang 3