33. 遞歸計算累加和


一. 問題

給定一個數 n ,用遞歸的手法求出從 1 到 n 的累加和。

1. 實例分析

假設傳入參數 n = 5。

(方法一)高斯公式

1 int gauss_sum(int n) {
2     int sum = (1 + n) * n / 2;
3 
4     return sum;
5 }

利用公式,一次即可算出答案,時間復雜度為 O(1)。

(方法二)循環計算

1 int normal_sum(int n) {
2     int sum = 0;
3     for (int i = 1; i <= n; ++i) {
4         sum += i;
5     }
6 
7     return sum;
8 }

用一個累加器,從 1 累加到 n ,時間復雜度為 O(n)。

(方法三)遞歸計算

1 int recursion_sum(int n) {
2     if (n == 1) {
3         return 1;
4     }
5 
6     return n + recursion_sum(n - 1);
7 }

這種手法是從后面加到前面,先加 n ,再加 (n - 1),最后一直加到 1 。當 n = 1時,函數把 1 返回,然后逐層返回,直到計算出結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM