问题描述:给出一个数组,求出数组所有元素之和。
方法一:暴力求解
通过for循环遍历出数组的每一个元素,将这些元素相加求和。
public static void main(String[] args) {
int a[]= {1,5,6,8,3,2};
int sum=0;
for(int i=0;i<a.length;i++) { //遍历数组
sum=sum+a[i]; //求和
}
System.out.println(sum);
}
运行结果:25
方法二:递归求解
定义一个f方法,递归调用方法自身,将原问题划分为多个子问题,将问题规模减小。
1.
子问题1:求第0个元素与后面1~i个所有元素之和;
子问题2:求第1个元素与后面2~i个所有元素之和
·······
子问题i:求第i个元素之和
public static int f(int[] a,int i) { //方法f()
if(i==a.length) { //递归出口
return 0;
}
f(a,i+1);
return f(a,i+1)+a[i];
}
public static void main(String[] args) {
int a[]= {1,5,6,8,3,2};
int sum=f(a,0);
System.out.println(sum);
}
运行结果:25
2.
子问题1:求前面第0~(i-1)个所有元素与第i个元素之和;
子问题2:求前面第0~(i-2)个所有元素与第i-1个元素之和;
·······
子问题i:求第0个元素之和;
public static int f(int[] a,int i) { //方法f()
if(i<0) { //递归出口
return 0;
}
f(a,i-1);
return f(a,i-1)+a[i];
}
public static void main(String[] args) {
int a[]= {1,5,6,8,3,2};
int sum=f(a,5);
System.out.println(sum);
}
运行结果:25