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);
}
đệ quy:tìm số lớn thư 2 trong mảng. lỗi chạy sai
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;
}
ko pit nhưng nhìn code mình vẫn dễ hiểu hơn
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?