2016-11-19 7 views
0

私は再帰で非常に悪く、私はそれを学ばせようとしています。私は、この関数の再帰的な同等のものを記述しようとしています再帰加算数

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

が、私はこの今のところ

public static int ques7(int n) { 

     int sum = 1; 

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

    } 

達成しているこの機能を持っている。しかし、私は、これは権利ではない疑いがある、任意のヘルプは本当にいただければ幸いです。機能が同じであるかどうか、あなたが書くことができ

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); 
    } 
} 

は、確認するには:

答えて

0

これを試してみてください

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

} 

をしかし覚えて、再帰がかかり、より多くのメモリです。 WHILEサイクルを使用すると、INT変数でのみ制限されます。再帰を使用すると、INTパラメータとスタックメモリ(新しい関数が呼び出されるたびに使用されるメモリが増えます)で制限されます。