30/09/2018, 19:05

Hỏi về in mảng bằng đệ quy trong C

#include <stdio.h>
#include <conio.h>
//#include "libDeQuy.h"
#define MAX 100

//nhap xuat mang bag de quy
void nhapMang(int a[], int n);
void xuatMang(int a[], int n);
int main()
{
    int a[MAX], n;

    do{
        printf("
Nhap vao so phan tu mang: ");
        scanf("%d", &n);
        if(n< 0 || n> MAX) printf("
Ban nhap sai gia tri! Moi nhap lai
");
    }while(n< 0 || n> MAX);

    nhapMang(a, n);
    xuatMang(a, n);

    getch();
    return 0;
}

void nhapMang(int a[], int n)
{
    if(n>= 0){
        nhapMang(a, n-1);//nhap cac phan tu truoc
        printf("Nhap vao phan tu thu: %d", a[n]);
        scanf("%d", &a[n]);

    }
}

void xuatMang(int a[], int n)
{
    if(n>= 0){

        xuatMang(a, n-1);
        printf("%d ", a[n]);
    }
}


sao nó không đếm số lượng phần tử mảng giống như vòng lặp ạ
Anh chị chỉ em với ạ

chichi viết 21:10 ngày 30/09/2018

void nhapMang(int a[], int n)
{
if(n>0){

    nhapMang(a, n-1);//nhap cac phan tu truoc
    printf("Nhap vao phan tu thu: %d", n);
    scanf("%d", &a[n]);
}

}

void xuatMang(int a[], int n)
{
if(n>0){

    xuatMang(a, n-1);
    printf("%d ", a[n]);
}

}

minh tran viết 21:16 ngày 30/09/2018

đệ qui thì phải có điều kiện (base case) để thoát chứ ko phải điều kiện để tiếp tục

Hồ Sỹ Kiên viết 21:15 ngày 30/09/2018

Hiểu rồi, thanks bạn!

Dương Nylghara viết 21:17 ngày 30/09/2018
#include <iostream>
#include<limits.h>

using namespace std;

void NhapMang(int *mang, int n, int i = 0)
{
    if(i == n)
        return;
    cout<< "nhap vao mang["<<i<<"]"<<endl;
    cin>>mang[i];
    NhapMang(mang,n,i+1);
}
/*
void NhapMang2(int *mang, int n)
{
    if(n ==0)
        return;
    NhapMang2(mang,n-1);
    cout<<"Nhap vao mang "<<n-1<<": ";
    cin>>mang[n-1];

    //cout<<
}
*/
void XuatMang(int *mang, int n)
{
    if(n==0)
        return;
    XuatMang(mang,n-1);
    cout<<" "<<mang[n-1];
}
int TinhTong(int *mang,int n, int i=0,int Tong = 0)
{
    if(i == n)
        return Tong;
    else
    return TinhTong(mang, n, i+1, Tong + mang[i]);
}
int TIMMAX(int *mang, int n, int i = 0, int MAX = INT_MIN)
{
    if(i == n )
        return MAX;
    return TIMMAX(mang,n,i + 1, mang[i]> MAX?mang[i]: MAX);
}


int uocSo(int *mang,int n, int i=0, int tong =0)
{
    if(i== n)
        return tong;
    return uocSo(mang,n,i+1, n % mang[i]==0 ? tong + mang[i] :  tong);
}
int demSoChan(int *mang, int n, int i=0, int dem=0)
{
    if(i==n)
        return dem;
    return demSoChan(mang,n,i+1,mang[i]%2==0?dem+1:dem);
}
int main()
{
    cout << "Hello world!" << endl;
    int n = 10;
    int *contro = new int [15];
    NhapMang(contro,n);
    XuatMang(contro,n);
    TinhTong(contro,n);
    cout<<"\nTONG :   "<<TinhTong(contro,n);
    TIMMAX(contro,n);
    cout<<"\nTIM MAX:   "<<TIMMAX(contro,n);


    uocSo(contro,n);
    cout<<"\nUoc so:  "<<uocSo(contro,n);
    cout<<"\nDem so Chan:  "<<demSoChan(contro,n);

    delete contro;
    return 0;
}

Full code Đệ Quy cho bạn tham khảo

Bài liên quan
0