Нахождение максимального элемента массива рекурсией

    using System;
    
    namespace _123
    {
        class Program
        {
            public static int IsEqual(int x, int y)
            {
                return (x > y) ? x : y;
            }
            public static int MaxValueNumber(int[] array, int N)
            {
                if (array.Length == 1)
                {
                    return array[0];
                }
                else if (array.Length == 2)
                {
                    return IsEqual(array[0], array[1]);
                }
                else
                {
                    return IsEqual(array[N-1], MaxValueNumber(array, N - 1));//переполнение стека(почему?)
                }
            }
        
static void Main(string[] args)
        {
            int MaxValue;
            {
                Random random = new Random();
                int N = 6;
                int[] array = new int[N];
                foreach (int i in array)
                {
                    array[i] = random.Next(-100, 100);
                    Console.WriteLine(array[i]);
                }
                MaxValue = MaxValueNumber(array, N);
            }
            Console.WriteLine(MaxValue);
        }

        }
    }

Ответы (1 шт):

Автор решения: Igor

Так как сам массив и его длина не меняются, все время вызывается код в else, что в конце концов приводит к переполнению стека.


public static int MaxValueNumber(int[] array, int N)
{
    if (N == 1)
    {
        return array[0];
    }
    else if (N == 2)
    {
        return IsEqual(array[0], array[1]);
    }
    else
    {
        return IsEqual(array[N - 1], MaxValueNumber(array, N - 1));
    }
}
→ Ссылка