2016-11-19 61 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; 

    } 

但我懷疑這是不對的,任何幫助將是非常讚賞。

回答

0

試試這個:

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

要檢查,功能是否相同,你可以寫:

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

} 

但要記住,遞歸是更多的內存消耗。使用WHILE循環,只能用INT變量進行限制。使用遞歸時,INT參數和堆棧內存是有限的(每次調用新函數時會使用更多的內存)。