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, botów: 0