我将画一棵递归树,然后尝试解释它
我正在修改和减小程序中数组的大小,以便于解释 -
#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;
}
据我所知,这就是本计划中发生的事情->
说明-(参考递归树图)
步骤1)(参考递归树图)
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*/
}
}
第二步)(参考递归树图)
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];
}
}
第三步)(参考递归树图)
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];
}
}
第四步)(参考递归树图)
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];
}
}
第五步)(参考递归树图)
/*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];
}
}
第6步)(参考递归树图)
//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*/
}
}
第7步)(参考递归树图)
//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.
}
}
第8步)(参考递归树图)
//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.
}
}
所以,你的输出是
65