将数字数组传递给递归Java程序

时间:2019-02-16 16:14:47

标签: java arrays recursion

我正在编写一个显示m(i)的程序,其中i = 1,2,3,4,5,107,1060。结果应为双精度值。而级数为m(i)= 1/2 + 2/3 + ..... i / i + 1

我正在尝试使用数组传递所需的数字。但是我遇到了兼容性问题。到目前为止,我有这个:

public class Recursive {
    public static void main(String[] args){
        int[] s;
        s = new int[]{1,2,3,4,5,107,1060};

        System.out.println(""   ,m(s));
    }

    public static double m(int i){
        double result;
        if(i > 1){
            result = i/(i + 1) + m(i - 1);
        } else{
            result = i/(i + 1);
        }
        return result;
    }
}

3 个答案:

答案 0 :(得分:1)

根据您收到的评论,大多数人认为您的问题正在询问:

public class Recursive {

    public static double m(int i) {
        double result = i / (i + 1.0);

        if (i > 1) {
            result += m(i - 1);
        }

        return result;
    }

    public static void main(String[] args) {
        int[] s = {1, 2, 3, 4, 5, 107, 1060};

        for (int i : s) { 
            System.out.println("m(" + i + ") = " + m(i));
        }
    }
}
  

因为顺序应该是1/2 + 2/3 + 3/4 + 4/5 + 5/6 + 107/108 +   1060/1061

这表明您确实在要求:

public class Recursive {

    public static double m(int i, int[] s) {
        double result = s[i] / (s[i] + 1.0);

        if (i > 0) {
            result += m(i - 1, s);
        }

        return result;
    }

    public static void main(String[] args) {
        int[] s = {1, 2, 3, 4, 5, 107, 1060};

        System.out.println(m(s.length - 1, s));
    }
}

除了s为空数组之外,其他方法都可以工作,就像您问题的其他可能答案一样。

答案 1 :(得分:0)

方法m()需要一个参数int,但是您要传递整个数组。保持for循环并为每个元素传递m()或处理m()

中的逻辑

答案 2 :(得分:0)

首先,您需要将数组作为参数传递给方法m()
或者您可以在类级别声明数组以避免递归开销。
对于这个小数组,让我们采用第一种方法。
然后,在m()内部,您犯了一个必须修复的逻辑错误。
您需要求和s[i]/s[i] + 1而不是i / (i + 1)
也是if语句从i > 1i > 0中的条件,因为数组的索引基于0

public static void main(String[] args){
    int[] s = new int[]{1, 2, 3, 4, 5, 107, 1060};
    System.out.println(m(s, 6));
}

public static double m(int[] s, int i){
    double result;
    if(i > 0){
        result = 1.0 * s[i]/(s[i] + 1) + m(s, i - 1);
    } else{
        result = 1.0 * s[i]/(s[i] + 1);
    }
    return result;
}

需要乘以的因子1.0可以避免整数除法:

s[i]/(s[i] + 1) 

这将始终导致0