從遞迴求和的三種方式理解遞迴思想
阿新 • • 發佈:2019-02-04
#include <stdio.h> int f1(int *a, int begin, int end) //折半遞迴求和 { int mid; if(begin + 1 == end) // [begin, ..., mid) + [mid, ..., end) return a[begin]; mid = (begin + end) / 2; return f1(a, begin, mid) + f1(a, mid, end); } int f2(int *a, int begin, int lenth) //a[begin] + SUM(a[begin + 1], ...... a[結束]) { if(begin == lenth) return 0; else return a[begin] + f2(a, begin + 1, lenth); } int f3(int *a, int end) //SUM(a[0], ......, a[end - 1]) + a[end] { if(end == -1) return 0; else return f3(a, end - 1) + a[end]; } int main() { int a[100] = {0}; int n, i; scanf("%d", &n); for(i=0; i<n; i++) scanf("%d", a+i); printf("%d\n", f1(a, 0, n)); //第一種結果 printf("%d\n", f2(a, 0, n)); //第二種結果 printf("%d\n", f3(a, n)); //第三種結果 return 0; }