一. 問題
給定一個數 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 返回,然后逐層返回,直到計算出結果。