2016-07-23 11 views
0

betrachten die FunktionWert der Variablen auf rekursiven Aufruf einer Funktion

void solve(int arr[],int ind,int sum,int n,int count) 
{ 
    if(ind==n){ 
      if(sum>max) 
       max=sum; 
     } 
     else{ 
      sum+=arr[ind];//sum 
      if(ind==n-1) 
      solve(arr,ind+1,sum,n,1);//1st call 
      if(ind==n-2 && count>1) 
      solve(arr,ind+2,sum,n,1);//2nd call 
      if(ind<n-1 && count<2){ 
       count++; 
       solve(arr,ind+1,sum,n,count);//3rd call 
      } 
      if(ind<n-2) 
       solve(arr,ind+2,sum,n,1);//4th call 
      if(ind<n-3) 
       solve(arr,ind+3,sum,n,1);//5th call 
     } 
} 

Ich habe kein Problem über die Logik, aber ich bin verwirrt über die Verabschiedung des variables.I bin nicht in der Lage herauszufinden, ob die ganze Zahl zu machen sum+=arr[ind] //sum wird bei jedem Aufruf als gleiche Variable übergeben oder nach jedem Aufruf der Funktion aktualisiert?

+0

Thnx..Ich habe die Antwort ich gues ... aber @ user3386109 was meinst du mit C++ Antwort .... ist es anders in c? – yobro97

+1

Referenzen sind eine C++ - Funktion. In C würden Sie einen Zeiger verwenden. – user3386109

+0

Ok ... verstanden! – yobro97

Antwort

2

sum wird als Wert übergeben, daher wird der Wert nicht aktualisiert. Die folgenden 5 solve Aufrufe werden mit dem gleichen sum Wert übergeben.

Wenn Sie sum wollen nach jedem Aufruf aktualisiert werden, sollten Sie es durch einen Verweis: void solve(int arr[],int ind,int &sum,int n,int count)

1

Der Wert sum wird aktualisiert, aber locally jedes Mal die Funktion solve bekommt called.You kann dies visualisieren, indem Sie den Wert Druck der Summe innerhalb der Funktionsdefinition.

Siehe das folgende Beispiel.

#include <stdio.h> 
void call(int); 
int main(void) { 
    // your code goes here 
    call(5); 
    return 0; 
} 
void call(int sum) 
{ 
    if(sum>15) 
     return; 
    printf("%d ",sum); 
    sum+=5; 
    call(sum); 

} 

Die o/p ist 5 10 15.

Vielleicht hilft Ihnen dies, um klarer zu visualisieren.