首页 文章

递归 - 堆栈溢出错误

提问于
浏览
-3

给定未排序的数组,找到最大值和最小值 . 我试图以递归,分而治之的方式执行此操作,但我不断收到堆栈溢出错误 . 我调试了,我继续在递归调用中得到错误,但不知道什么是错误或如何解决它 .

我有静态的最小和最大变量 .

感谢您提供的信息和帮助!

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];
    }
}

1 回答

  • 0

    这是一个简单的方法(没有递归):

    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;
        }
    }
    

    请注意,我在这里使用了参数 . 这样做是为了简化代码 . 通常,我更愿意返回指定的类或tuple .

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

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

相关问题