GIẢI THUẬT ĐỆ QUY - Cấu trúc dữ liêu-giải thuật.
Monday, November 24, 2014
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(int
n,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(int
a[],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(int
a[],int n)
{ 
      if(n==1) return a[0];
  
   if
(a[n-1]>max(a,n-1)) return a[n-1];
  
   return
max(a,n-1);
}
int min(int
a[],int n)
{ 
      if(n==1) return a[0];
  
   if
(a[n-1]<min(a,n-1)) return a[n-1];
   
  return
min(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( int
a[][50],int m, int
n)
{ 
      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( int
a[][50],int m,int
n)
{ 
      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( int
a[][50], int m,int
n)
{ 
      if(n==0) return
a[m][n];
  
   if
(a[m][n]<min1(a,m,n-1)) return a[m][n];
   
  return
min1(a,m,n-1);
}
int min( int
a[][50], int m, int
n)
{ 
      if(m==0) return
min1(a,m,n);
  
   if
( min1(a,m,n)<min(a,m-1,n)) return
min1(a,m,n);
   
  return
min(a,m-1,n);
}
int max1(int
a[][50],int m,int
n)
{ 
      if (n==0)return
a[m][n];
  
   if
(a[m][n]>max1(a,m,n-1)) return a[m][n];
  
   return max1
(a,m,n-1);
}
int max(int
a[][50],int m,int
n)
{ 
      if(m==0) return
max1(a,m,n);
  
   if
(max1(a,m,n)>max(a,m-1,n)) return
max1(a,m,n);
   
  return
max(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();
}
 
 dungnv
dungnv 
 
All comments [ 0 ]
Your comments