繁体   English   中英

递归 - 堆栈溢出错误

[英]Recursive - stack overflow error

给定一个未排序的数组,找到最大值和最小值。 我正在尝试以递归、分而治之的方式执行此操作,但我不断收到堆栈溢出错误。 我进行了调试,并且在递归调用中不断收到错误消息,但不知道出了什么问题或如何解决。

我确实有静态最小和最大变量。

感谢您的信息和帮助!

static void findMaxMin(int[] array, int start, int end)
{
    if (end == 2)
    {
        setMaxMin(array);
    }
    else
    {
        int mid = ((end) / 2);
        findMaxMin(array, start, mid);
        findMaxMin(array, mid + 1, end);
    }
}
private static void setMaxMin(int[] array)
{
    if (array[0] > array[1])
    {
        max = array[0];
        min = array[1];
    }
    else
    {
        min = array[0];
        max = array[1];
    }
}

这是一种简单的方法(无需递归):

void FindMinAndMaxValues(int[] array out int min, out int max)
{
    min = int.MaxValue,
    max = int.MinValue;

    foreach(var val in array)
    {
        max = (val > max) ? val : max;
        min = (val < min) ? val : min;
    }
}

请注意,我在这里使用了 out 参数。 这样做是为了代码的简单性。 通常,我更愿意返回指定的 class 或tuple

此外,LINQ 具有您可以使用的minmax扩展方法 - 所以整个事情变成了这样:

var max = array.Max();
var min = array.Min();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM