Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用递归Java的两个数组的乘积_Java_Recursion - Fatal编程技术网

使用递归Java的两个数组的乘积

使用递归Java的两个数组的乘积,java,recursion,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];

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

但是我不知道如何返回一个由整数组成的数组。辅助方法是一个很好的建议,但是它的方法签名与代码中列出的不同

原因是您需要跟踪小于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));
    }
}
导入java.util.array;
公共类产品{
//辅助法
私有静态void _arrayProd(int[]v1,int[]v2,int[]result,int n,int i){
if(i=0){
结果=新整数[n];
_arrayProd(v1,v2,结果,n,0);
}
返回结果;
}
公共静态void main(字符串[]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));
}
}

这里有一种递归方法:)


请就您遇到的特定问题提问。顺便说一句,欢迎使用堆栈溢出。我的特定问题是,当我尝试返回产品时,会出现以下错误:错误:不兼容类型返回a1[n]*a2[n];^必需:int[]找到:int 1错误抱歉没有那么具体,我仍在试图弄清楚这个网站是如何工作的。请发布整个相关代码-如果没有更多上下文,您发布的关于错误的评论很难解释。非常感谢,但我收到一个异常:线程“main”中的异常错误:未解决的编译问题:无法将结果解析为变量这是一个容易解决的问题。您正在使用IDE吗?不管怎么说,我已经编辑并修复了我想他刚刚修复了它谢谢大家我已经知道出了什么问题,是的,我正在使用Eclipse。谢谢你解决了我的问题!
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]
}