本实例不是为了说明这几种方法效率问题,只是为提供一个新的思路。

参考总结了4种思想。

a[]={...}
begin=0;end=a.length()-1;

1,从begin开始一直加到end

2,从end开始一直加到begin

3,begin和end同时开始进行加法操作

4,定义中点middle,对[begin,middle),[middle,end)进行操作,思想:二分法

public class a1test {

	// 从n递减调用递归
	public static void f(int n) {
		if (n > 0)
			f(n - 1);// 打印0-(n-1)
		System.out.println(n);// 打印 n
	}

	// 打印begin-end
	public static void f2(int begin, int end) {
		if (begin > end)
			return;
		System.out.println(begin);// 打印begin
		f2(begin + 1, end);// 打印begin+1 - end
	}

	// 求a数组中,从begin到结束的元素和
	private static int f3(int[] a, int begin) {

		if (begin == a.length)
			return 0;
		int x = f3(a, begin + 1);
		return x + a[begin];

	}

	// 求a数组中,从end到第一个的元素和
	private static int f4(int[] a, int end) {

		if (end < 0)
			return 0;
		int x = f4(a, end - 1);
		return x + a[end];

	}

	// 两边逼近求和
	private static int f5(int[] a, int begin, int end) {

		if (end - begin == 1)// 数组长度为偶数
		{
			return a[begin] + a[end];// 将上层传下来第begin号元素和第end号元素对应数值返回
		}
		if (end - begin == 0)// 数组长度为奇数
		{
			return a[end];
		}
		int x = f5(a, begin + 1, end - 1);
		System.out.println(x);
		return x + a[begin] + a[end];
	}

	// 折半求和 利用中间值
	private static int f6(int[] a, int begin, int end) {

		int middle = (begin + end) / 2;

		if (begin > end)
			return 0;
		if (begin == end)
			return a[end];

		return f6(a, begin, middle) + f6(a, middle + 1, end);

	}

	public static void main(String[] args) {

		// f(10);
		// f2(0, 9);

		int[] a = { 2, 5, 3, 9, 12, 7 };
		// int sum=f3(a, 0);
		// int sum=f4(a, a.length-1);
		// int sum = f5(a, 0, a.length - 1);
		int sum = f6(a, 0, a.length - 1);
		System.out.println(sum);
	}

}

此次仅为自我总结,防止忘记。