I : GIẢI THUẬT ĐỆ QUY CƠ BẢN ( phần 1)
Bài 1: Viết chương trình xuất n trị đầu tiên của 1 cấp số cộng có số hạng đầu là a (nhập từ bàn phím), công sai r (nhập từ bàn phím). Sử dụng kỹ thuật đệ quy để xây dựng hàm tính trị thứ i của 1 cấp số cộng.
#include<conio.h>
#include<stdio.h>
int csc(intn,int a,int r)
{
if (n==1) return a;
return(r+csc(n-1,a,r));
}
int main()
{
int n, a, r, i;
printf("nhap so hang dau a= "); scanf("%d",&a);
printf("nhap cong sai r= "); scanf("%d",&r);
printf("nhap so luong cac phan tu can xuat n= ");
scanf("%d",&n);
if(n<=0) printf("so luong cac phan tu can xuat ban nhap ko hop le!");
for(i=1;i<=n;i++)
printf("\n tri thu %2d cua csc= %5d",i,csc(i,a,r));
getch();
}
Bài 2: Cho mảng gồm n phần tử. Viết chương trình có sử dụng hàm đệ quy tính tổng các phần tử của mảng.
#include<conio.h>
#include<stdio.h>
int tong(inta[],int n)
{
if(n==1) return a[0];
return(a[n-1]+tong(a,n-1));
}
int main()
{
int a[50], n, i;
printf("\n nhap so luong phan tu cua mang n= ");
scanf("%d",&n);
if(n<=0) printf("so luong phan tu ban nhap ko hop le!");
else
{
for(i=0;i<n;i++)
{
printf("a[%d]= ",i);
scanf("%d",&a[i]);
}
printf("\n tong= %5d",tong(a,n));
}
getch();
}
Bài 3: Cho mảng gồm n phần tử. Viết chương trình có sử dụng hàm đệ quy cho biết giá trị lớn nhất, giá trị nhỏ nhất của mảng
#include<conio.h>
#include<stdio.h>
int max(inta[],int n)
{
if(n==1) return a[0];
if(a[n-1]>max(a,n-1)) return a[n-1];
returnmax(a,n-1);
}
int min(inta[],int n)
{
if(n==1) return a[0];
if(a[n-1]<min(a,n-1)) return a[n-1];
returnmin(a,n-1);
}
int main()
{
int a[50],n,i;
printf("\n nhap so luong phan tu cua mang n= ");
scanf("%d",&n);
if(n<=0) printf("so luong phan tu ban nhap ko hop le!");
else
{
for(i=0;i<n;i++)
{
printf("a[%d]= ",i);
scanf("%d",&a[i]);
}
printf("\n max= %5d",max(a,n));
printf("\n min= %5d",min(a,n));
}
getch();
}
Bài 4: Cho ma trận có m hàng, n cột. Viết chương trình có sử dụng hàm đệ quy cho biết giá trị lớn nhất, giá trị nhỏ nhất của ma trận.
#include <stdio.h>
#include <conio.h>
void nhap( inta[][50],int m, intn)
{
int i,j,tg;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
printf("a[%d][%d]= ",i,j); scanf("%d",&tg);
a[i][j]=tg;
}
}
void xem( inta[][50],int m,intn)
{
int i,j;
printf("\n xem mang vua nhap:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++) printf("%5d",a[i][j]);
printf("\n");
}
}
int min1( inta[][50], int m,intn)
{
if(n==0) returna[m][n];
if(a[m][n]<min1(a,m,n-1)) return a[m][n];
returnmin1(a,m,n-1);
}
int min( inta[][50], int m, intn)
{
if(m==0) returnmin1(a,m,n);
if( min1(a,m,n)<min(a,m-1,n)) returnmin1(a,m,n);
returnmin(a,m-1,n);
}
int max1(inta[][50],int m,intn)
{
if (n==0)returna[m][n];
if(a[m][n]>max1(a,m,n-1)) return a[m][n];
return max1 (a,m,n-1);
}
int max(inta[][50],int m,intn)
{
if(m==0) returnmax1(a,m,n);
if(max1(a,m,n)>max(a,m-1,n)) returnmax1(a,m,n);
returnmax(a,m-1,n);
}
int main()
{
int a[50][50],m,n;
printf("Nhap so cot cua ma tran n = "); scanf("%d",&n);
printf("Nhap so hang cua ma tran m = "); scanf("%d",&m);
if((n<=0)||(m<=0)) printf("so hang so cot ban nhap ko hop le!");
else
{
nhap(a,m,n);
xem(a,m,n);
printf("\n min = %d",min(a,m-1,n-1));
printf("\n max = %d",max(a,m-1,n-1));
}
getch();
}
No comments:
Post a Comment