Największy i najmniejszy element rekurencyjnie

0

Witam, mam za zadanie przepisać kod z C++ do C#.
Program wyświetla największy i najmniejszy liczbę tablicy.
W C++ wszystko działa jak należy, ale po przepisaniu kodu do C# już nie jest tak kolorowo.
Byłbym bardzo wdzięczny za pomoc w rozwiązaniu problemu.

Kod w C++

#include <iostream>
#include <stdlib.h>

using namespace std;

const int N = 8;
int X[N] = {1, 4, 3, 2, 4, 9, 5, 7};
void MinMaxRek( int lewy, int prawy, int &index_min, int &index_max);

int main(int argc, char** argv) {
	int min, max;
	for(int i=0; i<N; i++)
	{
		cout <<"X[" << i << "]=" << X[i] << ";\n";
	}
	cout << endl;
	
	MinMaxRek(0, N-1, min, max);
	cout << "min= X[" << min << "] = " << X[min] << "\n" << endl;
	cout << "max= X[" << max << "] = " << X[max] << "\n" << endl;
	return 0;
}

void MinMaxRek( int lewy, int prawy, int &index_min, int &index_max)
{
	int srodek, i_max1, i_max2, i_min1, i_min2;
	if(lewy == prawy)
	{
		index_min = index_max =lewy;
		return;
	}
	
	if(lewy+1 == prawy)
	{
		if(X[lewy] >= X[prawy])
		{
			index_max = lewy;
			index_min = prawy;
			return;
		}
		else
		{
			index_min = lewy;
			index_max = prawy;
			
		}
	}
	
	if(lewy+1 < prawy)
	{
		srodek = (lewy+prawy)/2;
		cout << "srodek = " << srodek << "\n";
		MinMaxRek(lewy, srodek, i_min1, i_max1);
		MinMaxRek(srodek+1, prawy, i_min2, i_max2);
		if( X[i_min1] <= X[i_min2] )
		{
			index_min = i_min1;
		}
		else
		{
			index_min = i_min2;
		}
		
		if( X[i_max1] >= X[i_max2] )
		{
			index_max = i_max1;
		}
		else
		{
			index_max = i_max2;
		}
		return;
		
	}
}
 

Kod w C#

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace min_max
{
    class Program
    {
        const int N = 8;
        static int[] X = new int[N] { 1, 4, 3, 2, 4, 9, 5, 7 };

        static void Main(string[] args)
        {

            int min = 0;
            int max = 0;
            for (int i = 0; i < N; i++)
            {
                Console.WriteLine("X[" + i + "] = " + X[i]);
            }
            MinMaxRek(0, N-1, ref min, ref max);
            Console.WriteLine("min = X[" + min + "] = " + X[min]);
            Console.WriteLine("max = X[" + max + "] = " + X[max]);
        }
        static void MinMaxRek(int lewy, int prawy, ref int index_min, ref int index_max)
        {
            int srodek;
            int i_min1 = 0;
            int i_max1 = 0;
            int i_min2 = 0;
            int i_max2 = 0;

            if( lewy+1 == prawy)
            {
                if(X[lewy] == prawy)
                {
                    index_max = lewy;
                    index_min = prawy;
                    return;
                }
                else
                {
                    index_min = lewy;
                    index_max = prawy;
                    return;
                }
            }
           if( lewy+1 < prawy)
            {

                srodek = (lewy + prawy)/2;
                MinMaxRek(lewy, srodek, ref i_min1, ref i_max1);
                MinMaxRek(srodek+1, prawy, ref i_min2, ref i_max2);

                if ( X[i_min1] <= X[i_min2])
                {
                    index_min = i_min1;
                }
                else
                {
                    index_min = i_min2;
                }

                if(X[i_max1] >= X[i_max2])
                {
                    index_max = i_max1;
                }
                else
                {
                    index_max = i_max2;
                }
                return;
            }
        }
    }
}
0

Debugger?

0

Okej, znalazłem swój błąd. Mała literówka przy przepisywaniu programu :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1