DQ.1.1 GIẢI THUẬT ĐỆ QUY

Sunday, August 3, 2014
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));
}

void 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));
}

void 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);
}

void 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);
}
   
void 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();
}

Bài 5: Viết chương trình có sử dụng hàm đệ quy tính xn.

#include<conio.h>
#include<stdio.h>

float luythua(int x,int n)
{ if(x==0) return 0;
   if(n==0) return 1;
   if(n<0) return (1/(luythua(x,-n-1)*x));
      return luythua(x,n-1)*x;
}

void main()
{ int x,n;
   printf("nhap x va n: "); scanf("%d%d",&x,&n);
   printf("%d^%d=%5.2f",x,n,luythua(x,n));
   getch();

Chia sẻ bài viết ^^
Other post

All comments [ 0 ]


Your comments