为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2022-06-23 17:33:38
我正在编写一个显示 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 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

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


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是一个空数组——就像你的问题的其他潜在答案一样。


查看完整回答
反对 回复 2022-06-23
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

首先,您需要将数组作为参数传递给方法m(),

或者您可以在类级别声明数组以避免递归开销。

对于这个小数组,让我们采用第一种方法。

然后,m()你在内心犯了一个必须纠正的逻辑错误。

你需要 sums[i]/s[i] + 1而不是i / (i + 1)。

还有if语句 from i > 1to中的条件,i > 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


查看完整回答
反对 回复 2022-06-23
?
手掌心

TA贡献1942条经验 获得超3个赞

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



查看完整回答
反对 回复 2022-06-23
  • 3 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信