2016-11-19 2 views
0

Ich bin sehr schlecht in Rekursion und ich versuche, es zu lernen. Ich habe diese FunktionRekursion, die Zahlen addiert

public static int ques07(int n) { 
     int sum = 1; 
     int k = 1; 
     while (sum <= n) { 
      sum = sum + k; 
      k++; 
     } 
     return sum; 
    } 

ich eine rekursive äquivalent diese Funktion zu schreiben, versuche ich bis jetzt diese

public static int ques7(int n) { 

     int sum = 1; 

     if(sum <= n) 
     return sum + ques7(n-1); 
     else 
      return sum; 

    } 

erreicht habe, aber ich vermute, das ist nicht richtig, jede mögliche Hilfe wäre wirklich zu schätzen .

Antwort

0

Try this:

public static int recSum(int n, int sum, int k) { 
    if ((sum+k)<=n){ 
     return recSum(n,sum+k, k+1); 
    }else{ 
     return (sum+k); 
    } 
} 

Um zu überprüfen, ob Funktionen die gleichen sind, können Sie schreiben:

int main() 
{ 
    std::cout << "Original sum "; 
    std::cout << ques07(22)<<"\n"; 
    std::cout << "Recursive sum "; 
    std::cout << recSum(22,1,1); 

} 

Aber denken Sie daran, ist Rekursion mehr Speicher verbrauchen. Mit WHILE-Zyklus sind Sie nur mit INT-Variable beschränkt. Durch die Rekursion sind Sie mit den INT-Parametern UND dem Stack-Speicher eingeschränkt (bei jedem Aufruf einer neuen Funktion wird mehr Speicher belegt).

Verwandte Themen