【问题标题】:Product of two arrays using recursion Java使用递归Java的两个数组的乘积
【发布时间】:2016-03-18 00:24:18
【问题描述】:

我有两个数组 a1 = {1, 2, 3, 4, 5}a2 = {2, 4, 6, 8} 带有一个整数 n = 3。我需要做的是,使用递归,返回每个元素乘积的新数组,直到到达由 n 标记的位置。最终结果应该是a3 = {2, 8, 18}

public class Product {

    public static int[] arrayProd(int [] v1, int [] v2, int n) {
        if(n >= 0){
            return a1[n] * a2[n];
        }
    }

    public static void main(String [] args) {
        int[] v1 = {1, 2, 3, 4, 5};
        int[] v2 = {2, 4, 6, 8};
        int n = 3;
    }
}

还建议我们使用辅助方法,如:

private static void auxArrayProd(int [] v1, int [] v2, int [] result, int n) {
    return null;
}

但我不知道如何返回由整数组成的数组

【问题讨论】:

  • 请就您遇到的特定问题提出问题。
  • 顺便说一句,欢迎来到 Stack Overflow。
  • 我的具体问题是,当我尝试退货时出现此错误:错误:不兼容的类型返回 a1[n] * a2[n]; ^ 必需:int[] 发现:int 1 错误
  • 对不起,我没有说得那么具体,我仍在试图弄清楚这个网站是如何运作的
  • 请发布整个相关代码 - 如果没有更多上下文,您发布的有关错误的评论很难解释。

标签: java recursion


【解决方案1】:

这是一种递归方法:)

public static void arrayProd(int [] v1, int [] v2, int upperBound, int curIndex, int[] prod) {
    if(curIndex == upperBound) {
        return;
    }
    prod[curIndex] = v1[curIndex] * v2[curIndex];
    arrayProd(v1, v2, upperBound, curIndex+1, prod);
}

public static void main(String [] args) {
    int[] v1 = {1, 2, 3, 4, 5};
    int[] v2 = {2, 4, 6, 8};
    int n = 3;
    // array size cant be greater than 3 as per your example
    int[] prod = new int[n];
    arrayProd(v1, v2, n, 0, prod);
    System.out.println(Arrays.toString(prod));    // [2, 8, 18]
}

【讨论】:

    【解决方案2】:

    辅助方法是一个很好的建议,但与您在代码中列出的方法签名不同。

    原因是您需要跟踪小于 n 的索引,那么递归的基本情况是该索引大于 n。

    在第一次调用辅助方法时,您从 0 开始索引,然后在辅助方法内部递归,这很像 for 循环来增加索引。

    此代码将打印您想要的[2, 8, 18]结果

    import java.util.Arrays;
    
    public class Product {
    
        // auxiliary method
        private static void _arrayProd(int[] v1, int[] v2, int[] result, int n, int i) {
            if(i < n){
                result[i] = v1[i] * v2[i];
                 _arrayProd(v1, v2, result, n, i+1);
            }
        }
    
        public static int[] arrayProd(int[] v1, int[] v2, int n) {
            int[] result = null;
            if(n >= 0){
                result = new int[n];
                _arrayProd(v1, v2, result, n, 0);
            }
            return result;
        }
    
    
        public static void main(String [] args) {
            int[] v1 = {1, 2, 3, 4, 5};
            int[] v2 = {2, 4, 6, 8};
            int n = 3;
    
            int[] v3 = arrayProd(v1, v2, n);
    
            System.out.println(Arrays.toString(v3));
        }
    }
    

    【讨论】:

    • 非常感谢,但我得到一个异常:线程“main”java.lang.Error中的异常:未解决的编译问题:结果无法解析为变量
    • 这很容易解决。你在使用 IDE 吗?无论如何,我已经编辑和修复了
    • 我想他刚刚修好了
    • 谢谢大家,我已经知道出了什么问题,是的,我正在使用 Eclipse。谢谢你解决了我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2019-10-28
    • 2012-02-18
    • 2017-05-02
    • 2016-02-29
    相关资源
    最近更新 更多