[英]Find the maximum elements in an array using recursion
我是一个算法初学者。我刚刚找到了一个解决方案,“递归地找到整数数组中的最大元素”:
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];
}
我做了几次测试,似乎工作正常。
但是,我发现有人使用其他递归方法解决了它,就像在这篇文章中一样:
他的代码如下:
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并始终使用tail元素进行比较;
2.他使用另一个“最大”参数来跟踪到目前为止发现的最大值。 我没有在我的代码中使用它,但我没有使用它。 这实际上是我被卡住的地方。 我没有使用那个“最大”变量来跟踪每次迭代的最大值,为什么我可以达到相同的结果?
任何帮助是极大的赞赏!
首先,nm所说的是正确的,复制阵列既昂贵又不必要。 另一种算法使用start来避免这种情况。
但是对于你的问题。 你实际上使用最大的只是没有命名任何东西!
return findMax(Arrays.copyOf(arr, arr.length-1))> arr[arr.length-1]?findMax(Arrays.copyOf(arr, arr.length-1)):arr[arr.length-1];
是你发现最大的地方。 它就像你提到的另一种算法。 首先,你找到最大的: findMax(Arrays.copyOf(arr, arr.length-1))
,然后你将它的值与: arr[arr.length-1]
选择你当前最大的更大值。
另一个建议,为什么你需要findMax(Arrays.copyOf(arr, arr.length-1))
调用findMax(Arrays.copyOf(arr, arr.length-1))
? 只需使用变量来提高算法速度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.