【发布时间】:2018-04-22 11:29:12
【问题描述】:
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);
}
}
【问题讨论】:
-
传统上,Java 中的方法名以小写开头
-
如果 random 函数产生 int 数,为什么数组包含双数?
-
@c0der 感谢您的编辑!