elkerülése rekurzió

szavazat
0

Van egy módszer, ami nekem a szükséges számú dobozok alapuló készülékek száma akkor hold.Currently i hajtották végre ezt a logikát használja rekurzió

private uint PerformRecursiveDivision(uint m_oTotalDevices,uint m_oDevicesPerBox, ref uint BoxesRequired)
        {
            if (m_oTotalDevices< m_oDevicesPerBox)
            {
                BoxesRequired = 1;
            }
            else if ((m_oTotalDevices- m_oDevicesPerBox>= 0) && (m_oTotalDevices- m_oDevicesPerBox) < m_oDevicesPerBox)
            {
                //Terminating condition
                BoxesRequired++;
                return BoxesRequired;
            }
            else
            {
                //Call recursive function
                BoxesRequired++;
                return PerformRecursiveDivision((m_oTotalDevices- m_oDevicesPerBox), m_oDevicesPerBox, ref BoxesRequired);
            }
            return BoxesRequired;
        }

Van-e jobb módszer arra, hogy ugyanazokat a logika használata nélkül rekurziót. Mivel ez a módszer, hogy az alkalmazásom nagyon lassú az esetre, ha több eszköz meghaladja 50.000.

A kérdést 15/03/2010 09:52
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
0

Igen, akkor sor, hogy elkerüljék a rekurziót. Vmivel, mint ez:

    private void ProcessNonRecursively(string data)
    {
        Queue<string> queue = new Queue<string>();

        // Enque initiali data.
        queue.Enqueue(data);

        while (queue.Count > 0)
        {
            // Get current data.
            string currentData = queue.Dequeue();

            // Process it here...

            // Enque all data to be processed instead of calling the recursion.
            foreach (string newData in someNewDataAfterProcessing)
            {
                queue.Enqueue(newData);
            }
        }
    }

De úgy néz ki, mint az Ön esetében nem kell a rekurzió / queue egyáltalán. Lásd a többi választ.

Válaszolt 15/03/2010 09:56
a forrás felhasználó

szavazat
3

Mit szólsz ehhez:

int boxesRequired = m_oTotalDevices / m_oDevicesPerBox;
if (m_oTotalDevices % m_oDevicesPerBox > 0)
    boxesRequired++;

return boxesRequired;

Nem értem, hogy miért lenne használni a rekurzió, vagy akár egy sorban alapú megoldás valami ilyesmi.

Válaszolt 15/03/2010 09:59
a forrás felhasználó

szavazat
2

Azt hiszem, meg kell félreértés. Ha meg kell határozni, hogy hány doboz van szükség, hogy tartani egy adott eszközök számát, ez triviális:

boxesRequired = ceil(totalDevices / devicesPerBox)

... ahol ceilegy olyan művelet, amely elveszi az frakcionális érték és kerekíti a legközelebbi egész számra. (Szinte minden környezetben van, hogy működik. Csak észre a Net tag, ez Math.Ceiling .Net; ha használja JScript.Net ez is Math.ceil, mert ez a szabvány része JavaScript.)

Ha kell csinálni pusztán a matematikai értéke:

boxesRequired = totalDevices / devicesPerBox
if totalDevices mod devicesPerBox <> 0 then
    increment boxesRequired
endif
Válaszolt 15/03/2010 09:59
a forrás felhasználó

szavazat
0

Elég valószínű, hogy a fordítóprogram már átalakult ez farok rekurzió egy hurkot.

Válaszolt 15/03/2010 10:05
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more