采用分治思想递归实现求和:
package com.jintao.example.algorithm;
import java.util.Arrays;
public class RecursiveSumTest {
public static void main(String[] args) {
// int array[] = new int[]{1, 3, 5, 3, 5, 5, 9};
int array[] = initArray();
long startTime = System.currentTimeMillis();
commonSum(array);
System.out.println("commonSumTime:" + (System.currentTimeMillis() - startTime) + "ms");
startTime = System.currentTimeMillis();
System.out.println("recursiveSum" + recursiveSum(array));
System.out.println("recursiveSumTime:" + (System.currentTimeMillis() - startTime) + "ms");
}
public static int recursiveSum(int[] array) {
if (array.length == 1)
return array[0];
else
return array[0] + recursiveSum(Arrays.copyOfRange(array, 1, array.length));
}
public static void commonSum(int[] array) {
int sum = 0;
for (int i : array) {
sum += i;
}
System.out.println("Sum:" + sum);
}
public static int[] initArray() {
int[] array = new int[10000];
for (int i = 0; i < 10000; i++) {
array[i] = i;
}
return array;
}
}
运行结果:
Sum:49995000
commonSumTime:0ms
recursiveSum49995000
recursiveSumTime:262ms
某人的一句话:
如果使用循环,程序的性能可能更高,如果使用递归程序可能更容易理解,如何选择要看什么对你来说更重要。