【发布时间】:2014-09-24 06:16:38
【问题描述】:
我是一个算法初学者。我刚刚制定了一个“递归查找整数数组中的最大元素”的解决方案:
public static int findMax(int[]arr)
{
if(arr.length==1)
return arr[0];
return findMax(Arrays.copyOf(arr, arr.length-1))> arr[arr.length-1]?findMax(Arrays.copyOf(arr, arr.length-1)):arr[arr.length-1];
}
我测试了好几次,似乎都可以正常工作。
但是,我发现有人使用其他递归方法也解决了这个问题:
finding max value in an array using recursion java
他的代码是这样的:
int largest(int[] a, int start, int largest)
{
if (start == a.length)
return largest;
else {
int l = (a[start] > largest ? a[start] : largest);
return largest(a, start + 1, l);
}
对于这个特定问题,我被困在我们思维方式差异的本质上。我的想法是:
1.他在每次递归中使用另一个参数“start”来跟踪当前光标到数组元素,我没有使用它,因为我在每次递归中将数组缩小1并且总是使用尾元素来比较;
2.他使用另一个参数“最大”来跟踪迄今为止发现的最大值。我没有在我的代码中使用它,但我没有使用它。这实际上是我卡住的地方。我没有使用那个“最大”变量来跟踪每次迭代中的最大值,为什么我能得到相同的结果?
非常感谢任何帮助!
【问题讨论】:
-
在这个任务中复制数组是昂贵且不必要的。
标签: arrays algorithm recursion