第一讲 递归与循环2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
* @Author: SHUAI
* @Date:   2015-12-03 17:13:08
*/
/*
        求数组的元素和(数组的属性:数组名,长度)
        1.区间[ a[begin]...a[end] )
        2.折半求和【 a[begin], a[mid] ) +  【 a[mid], a[end] 】
*/
#include <stdio.h>
#define N 5
int fun(int a[], int length, int begin, int end) {
  int sum;
  if (begin == end || begin == length) return 0;
  sum = fun(a, length, begin + 1, end);
  return sum + a[begin];
}
 
int main(void) {
  int a[N] = {1, 2, 3, 4, 5};
  printf("%d\n", fun(a, N, 0, 4));//第0到第三个之和
  return 0;
}

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#define N 8
int fun(int a[], int begin, int end) {
  //只写了主要算法,没做越界判断什么的。
  if (begin == end) return a[begin];
  if (end - begin == 1) return a[begin] + a[end];
  return fun(a, begin, (begin + end) / 2 - 1) + fun(a, (begin + end) / 2, end);
}//[begin, mid)  [mid, end)
 
int main(void) {
  int a[N] = {1, 2, 3, 4, 5, 6, 7, 8};
  printf("%d\n", fun(a, 0, 5));
  return 0;
}

=============注===============

部分叙述来自于蓝桥杯讲解视频。

posted @ 2015-12-03 22:02  一支小白  阅读(178)  评论(0编辑  收藏  举报