使用递归Java的两个数组的产品

时间:2016-03-18 00:24:19

标签: java recursion

我有两个数组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;
}

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

2 个答案:

答案 0 :(得分:2)

这是一种递归方法:)

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]
}

答案 1 :(得分:1)

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

原因是您需要跟踪小于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));
    }
}