Что не так с вызовом рекурсии? - C#
Формулировка задачи:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace max1
{
class Program
{
public static int max(int l, int r)
{
//Console.WriteLine(l + " " + r);
int mid, v, n;
if (l == r) return l;
mid = (l + r) / 2;
n = max(l, mid);
v = max(mid + 1, r);
if (n > v) return n;
else return v;
}
static void Main(string[] args)
{
int m, l = 0, r = 200;
int[] mas = new int[200];
Random z = new Random();
for (int i = 1; i <= mas.Length; )
{
int index = z.Next(200);
if (mas[index] == 0)
{
mas[index] = i;
i++;
}
}
for (int i = 0; i < 200; i++)
Console.Write(mas[i] + " ");
Console.WriteLine();
m = max(l,r);
Console.WriteLine();
Console.WriteLine(l + " " + r);
Console.WriteLine(m);
}
}
} int[] mas = new int[200];
Random z = new Random();
for (int i = 1; i <= mas.Length; )
{
int index = z.Next(200);
if (mas[index] == 0)
{
mas[index] = i;
i++;
}
}Решение задачи: «Что не так с вызовом рекурсии?»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace max1
{
class Program
{
public static int max(int[] data, int l, int r)
{
//Console.WriteLine(l + " " + r);
int mid, v, n;
if (l == r) return data[l];
mid = (l + r) / 2;
n = max(data, l, mid);
v = max(data, mid + 1, r);
if (n > v) return n;
else return v;
}
static void Main(string[] args)
{
int length = 20;
int[] sourceData = new int[length];
for(int k1 = 0, k2 = length - 1; k1 <= k2; ++k1, --k2){
sourceData[k1] = (k1 - k2) * k2;
sourceData[k2] = (k1 + k2) * k1;
}
int maximum = max(sourceData, 0, length - 1);
Console.WriteLine("Source data:");
print(sourceData);
Console.WriteLine("Max: " + maximum);
}
private static void print(int[] data){
for(int k = 0; k < data.Length; ++k){
Console.Write(data[k]+" ");
}
Console.WriteLine();
}
}
}