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/