Что не так с вызовом рекурсии? - 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();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5