日期:2014-05-20  浏览次数:20866 次

关于递归
下面的程序要求求出数组之和,请看一下哪里错了?

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));
}
}
在别人的基础上改了下,呵呵