关于递归
下面的程序要求求出数组之和,请看一下哪里错了?
public class Sum{
int s;
public int sum(int a[],int n){
if(n> 0)
return s=sum(a[n-1],n-1);
else s=s+a[n];}
public static void main(String[] args){
int[] a={1,2,3,4,5,6};
s=sum(a[],5);
System.out.println(s);}}
程序运行出错:
C:\java> javac Sum.java
Sum.java:11: 需要 ".class "
s=sum(a[],5);
^
需要 ".class " 是什么意思?
------解决方案--------------------一塌糊涂,看书先
------解决方案--------------------递归的时候传的参数不对,return s=sum(a[n-1],n-1);
a[n-1]不是数组,只是一个数组元素。
------解决方案--------------------朋友初看一下,发现程序里面你有静态方法main()直接调用非静态变量s和非静态方法sum(),这样是不行的,java中不能这样使用。应该先产生一个类的对象,在用这个对象去调用它门。
另外还有一点,就是在递归中传递数组参数比较麻烦,所以建议只传个数组的下标就行了。
最后还有一点逻辑上的错误。这个语句s=sum(a[n-1],n-1);应改为s=a[n]+sum(a[n-1],n-1);
下面是能够得到正确结果的代码:
public class Sum {
int s;
int[] a = { 1, 2, 3, 4, 5, 6 };
public int sum(int n) {
if (n > 0)
return s = a[n] + sum(n - 1);
else
return s = s + a[n];
}
public static void main(String[] args) {
Sum su = new Sum();
su.s = su.sum(5);
System.out.println(su.s);
}
}
------解决方案--------------------public class Sum
{
public static int sum(int[] num, int length)
{
if(length> 0)
{
return num[length]+sum(num,--length);
}
else
{
return num[length];
}
}
public static void main(String[] args)
{
int[] a={1,2,3};
int i=a.length-1;
System.out.println(sum(a, i));
}
}
在别人的基础上改了下,呵呵