I WILL DRAW A RECURSION TREE AND THEN TRY TO EXPLAIN IT
I am modifying & reducing the size of the array in your program to make it easier to explain -
#include <stdio.h>
int maiorVetor(int A, int N) {
int maior;
if(N == 1)
return A[0];
else {
maior = maiorVetor(A, N-1);
if(maior > A[N-1])
return maior;
else
return A[N-1];
}
}
int main () {
int A[4] = {12, 65, 14, 38};
printf("%d", maiorVetor(A, 4));
return 0;
}
ACCORDING TO ME, THIS IS WHAT HAPPENS IN THIS PROGRAM->

Explanation-(refer to the recursion tree diagram)
Step 1) (refer to the recursion tree diagram)
int maiorVetor(int A, int 4) {
int maior;
if(N == 1) // here 4!=1
return A[0];
else {
maior = maiorVetor(A, N-1); //this is where recursion happens.
//So,maior=maiorVector(A,4-1)=maiorVector(A,3)
//Now here, we again call the maiorVector function
//with value maiorVector(A,3)
/*So, for now we leave original function func. maiorVector(A,4) just at this
line, i.e , just before the if statement.
We'll touch this if statement and consequent statements again in Step 8.*/
if(maior > A[N-1]) /*LEFT FOR
return maior; STEP 8*/
else
return A[N-1]; /*LEFT FOR STEP 8*/
}
}
Step 2) (refer to the recursion tree diagram)
int maiorVetor(int A, int 3) {
int maior;
if(N == 1) // here 3!=1
return A[0];
else {
maior = maiorVetor(A, N-1); //this is where recursion happens.
//So,maior=maiorVector(A,3-1)=maiorVector(A,2)
//Now here, we again call the maiorVector function
//with value maiorVector(A,2)
/*So, for now we leave original function func. maiorVector(A,3) just at this
line, i.e , just before the if statement.
We'll touch this if statement and consequent statements again in Step 7.*/
if(maior > A[N-1])
return maior;
else
return A[N-1];
}
}
Step 3) (refer to the recursion tree diagram)
int maiorVetor(int A, int 2) {
int maior;
if(N == 1) // here 2!=1
return A[0];
else {
maior = maiorVetor(A, N-1); //this is where recursion happens.
//So,maior=maiorVector(A,2-1)=maiorVector(A,1)
//Now here, we again call the maiorVector function
//with value maiorVector(A,1)
/*So, for now we leave original function func. maiorVector(A,2) just at this
line, i.e , just before the if statement.
We'll touch this if statement and consequent statements again in Step 6.*/
if(maior > A[N-1])
return maior;
else
return A[N-1];
}
}
Step 4) (refer to the recursion tree diagram)
int maiorVetor(int A, int 1) {
int maior;
if(N == 1) // YES,HERE 1==1.SO WE REUTRN A[0]=12.
return A[0]; //THE LOOP IS TERMINATED AND WE EXIT FROM mainVector(int A,int 1).
else {
maior = maiorVetor(A, N-1);
if(maior > A[N-1])
return maior;
else
return A[N-1];
}
}
Step 5) (refer to the recursion tree diagram)
/*From this step, we start coming out of the recursion. That, according to the
Recursive tree diagram, we start moving in the reverse/upward direction.*/
/*The value returned in step 4 from maiorVector(A,1)=12 is stored in the variable
maior in the first statement of else block.*/
int maiorVetor(int A, int 2) {
int maior;
if(N == 1) // here 2!=1
return A[0];
else {
maior = maiorVetor(A, N-1); // =maiorVector(A,2-1)=maiorVector(A,1)=12
if(maior > A[N-1])
return maior;
else
return A[N-1];
}
}
Step 6) (refer to the recursion tree diagram)
//as told in Step 3, we had to come back in the maiorVector(A,2) in step 6.
int maiorVetor(int A, int 2) {
int maior;
if(N == 1) // here 2!=1
return A[0];
else {
maior = maiorVetor(A, N-1); // =maiorVector(A,2-1)=maiorVector(A,1)=12
if(maior > A[N-1]) //if(12>A[2-1])-->if(12>A[1])-->if(12>65), which is
//false
return maior;
else
return A[N-1]; /*Since else part is true, we will return 65.
Also, this 65 is returned as the value for maior in the
fucntion maiorVector(A,3) in step 7*/
}
}
Step 7) (refer to the recursion tree diagram)
//as told in Step 2, we had to come back in the maiorVector(A,3) in step 7.
int maiorVetor(int A, int 3) {
int maior;
if(N == 1) // here 3!=1
return A[0];
else {
maior = maiorVetor(A, N-1); // =maiorVector(A,3-1)=maiorVector(A,2)=65
if(maior > A[N-1]) //if(65>A[3-1])-->if(65>A[2])-->if(65>14), which is
//true. So return 65.
return maior; /*Also, this 65 acts as the value for maior for the
fucntion maiorVector(A,4)*/
else
return A[N-1]; //false, so not executed.
}
}
Step 8) (refer to the recursion tree diagram)
//as told in Step 1, we had to come back in the maiorVector(A,4) in step 8.
int maiorVetor(int A, int 4) {
int maior;
if(N == 1) // here 4!=1
return A[0];
else {
maior = maiorVetor(A, N-1); // =maiorVector(A,4-1)=maiorVector(A,3)=65
if(maior > A[N-1]) //if(65>A[4-1])-->if(65>A[3])-->if(12>14), which is
//true. So return 65.
return maior; /*Now,this value 65 is returned and printed through the
printf("%d",mainVector(A,4)); statement in the main
function*/
else
return A[N-1]; //false, so not executed.
}
}
SO, YOUR OUTPUT IS
65