java - 数组递归练习

标签 java arrays recursion

a) 创建一个随机数数组,其大小为 2 的幂。使用循环查找每对值(索引 0 和 1、2 和 3、4 和 5 等)的差异并将它们存储在新数组中。然后找出每一对差异的差异,依此类推,直到只剩下一个差异。 提示:仔细考虑你的循环边界

b) 现在,创建一个“就地”的解决方案,即,它不需要创建新数组。同样,这需要仔细考虑循环边界。

c) 最后,编写一个使用递归函数而不是循环的解决方案。

我一直在尝试解决上述练习,但我对 b 的含义以及如何使用递归函数感到困惑。以下是我对 a 部分的解决方案:

public class RandomArray{

    private static double ArrayFn(int p){

        double[] orignalArray = new double[(int)Math.pow(2,p)];
        for (int i = 0; i< orignalArray.length; i++){
            orignalArray[i] = (int)(Math.random() * 10) ;
        }
        System.out.println(Arrays.toString(orignalArray));
        double y = ArrayDifferenceloop(orignalArray);
        System.out.println("Value of Array" + y);
        return y;
    }

    private static double ArrayDifferenceloop(double[] arg){

        do{
            double[] newArr = new double[(arg.length/2)];
            for (int i = 0; i< arg.length; i+=2){
                newArr[i/2] = arg[i] - arg[i+1];
            }
            System.out.println("New Array is =" + Arrays.toString(newArr));
            //copy newArr to arg
            arg = new double[(newArr.length)];
            System.arraycopy(newArr,0,arg,0,newArr.length);
        }while(arg.length > 1);

        return arg[0];
    }

    public static void main(String[] args){

        double z = ArrayFn(3);
        System.out.println("value" + z);
    }
}

最佳答案

我可以帮助你解决b)点 您可以将差异存储在原始数组本身中:
[0]和[1]的差值放入[0],
[2] 和 [3] 的差值放入 [1] 中, 等等。
您可以计算索引以将结果放入对的索引中,或者为结果和选择对保留两个索引变量。
您只需重复迭代原始数组,每次迭代较少的单元格,直到只剩下两个单元格。

递归解决方案应该很清楚......

关于java - 数组递归练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49965405/

相关文章:

recursion - Clojure 递归函数

python - nopython 模式下 Numba 递归函数出错

php - 从数据库获取数组并保存为变量

C. 函数修改动态分配的二维数组时出现段错误

java - 跟踪递归方法

java - 动态模块 : How to add auto increment numbers to key field while adding record to table

php - 对 MySQL 列和 PHP 数组进行排序

java - 这种基于 Java 状态的设计模式的名称是什么?

java - 如何使用 Spring Web Flux 处理 url 编码的有效负载

java - 使用gson将列表反序列化为不可修改的集合