將每一項的分子、分母分別存入陣列,再累加計算。適合需要保留中間項值的場合。
#include <stdio.h>
double print_s(int n) {
double p1[50], p2[50], Sn[50];
p1[0] = 2; p2[0] = 1;
Sn[0] = p1[0] / p2[0];
for (int i = 1; i < n; ++i) {
p1[i] = p1[i-1] + p2[i-1]; // 分子 = 前分子 + 前分母
p2[i] = p1[i] - p2[i-1]; // 分母 = 前分子
Sn[i] = Sn[i-1] + (p1[i] / p2[i]);
}
return Sn[n-1];
}
int main() {
int n;
printf("輸入項數: ");
scanf("%d", &n);
if (n > 0 && n <= 50)
printf("前 %d 項和 = %.5f\n", n, print_s(n));
else
printf("項數範圍 1-50\n");
return 0;
}
| 特性 | 遞推法 (單變數) | 陣列法 |
|---|---|---|
| 空間複雜度 | O(1) | O(n) |
| 可回溯中間值 | 否 | 是 |
| 程式碼簡潔度 | 高 | 中 |
若僅需最終和,遞推法更優;若需列印每項明細或進一步分析,陣列法更方便。