Нахождение максимального элемента массива рекурсией
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));
}
}