30/09/2018, 16:42

đệ quy:tìm số lớn thư 2 trong mảng. lỗi chạy sai

int dmax1(int a[], int n)
{
	if (n <= 1) return 1;
	else
		if (a[n - 1] > dmax1(a, n - 1)) return a[n-1];
	return dmax1(a, n - 1);
	
}
int dmax2(int a[], int n)
{ 
	if (n <= 1) return 1;
	else
		if (a[n-1]>dmax2(a, n - 1) && (a[n-1]!=dmax1(a,n-1))&& dmax2(a,n-1)!=dmax1(a,n-1)) return a[n-1];
	return dmax2(a, n - 1);
}
Gió viết 18:50 ngày 30/09/2018

Không biết làm thế này có được không

 #include <stdio.h>
#include <limits.h>

#define inf INT_MAX

void max2nd(int a[],int n,int *max1,int * max2){
   //khởi tạo ban đầu
  if(n<1){
    *max1=*max2=-inf;
    return;
  }
  // đệ quy
  max2nd(a,n-1,max1,max2);
//update max1,max2
  if(a[n-1] > *max1){ //có phần tử lớn hơn. Nhường max1 cho max2 và cập nhật max1
    *max2=*max1;
    *max1=a[n-1];
  }else if(a[n-1]>*max2 && a[n-1]!=*max1){// max2<a[n-1]<max1 
    *max2=a[n-1];
  }
}
int main(void) {
	int a[]={2,3,5,5,4,4,4,5};
        int n=8;
        int max1,max2;
        max2nd(a,n,&max1,&max2);
        printf("%d %d",max1,max2);
        return 0;
}
Long Long viết 18:45 ngày 30/09/2018

ko pit nhưng nhìn code mình vẫn dễ hiểu hơn

Bài liên quan
0