Megosztás a következőn keresztül:


Rekurzív eljárások (Visual Basic)

A rekurzív eljárás az, amely meghívja magát. A Visual Basic-kód írásának általában nem ez a leghatékonyabb módja.

Az alábbi eljárás rekurziót használ az eredeti argumentum faktoriálisának kiszámításához.

Function Factorial(n As Integer) As Integer
    If n <= 1 Then
        Return 1
    End If
    Return Factorial(n - 1) * n
End Function

Megfontolandó szempontok rekurzív eljárásokkal

Korlátozási feltételek. Rekurzív eljárást kell terveznie legalább egy olyan feltétel teszteléséhez, amely megszakíthatja a rekurziót, és azt az esetet is kezelnie kell, amikor egy ilyen feltétel nem teljesül ésszerű számú rekurzív híváson belül. Legalább egy feltétel nélkül, amely sikertelenül teljesíthető, az eljárás nagy kockázatot jelent a végtelen ciklusban történő végrehajtásra.

Memóriahasználat. Az alkalmazás korlátozott mennyiségű helyet biztosít a helyi változók számára. Minden alkalommal, amikor egy eljárás meghívja magát, több helyet használ a helyi változók további másolataihoz. Ha ez a folyamat határozatlan ideig folytatódik, az végül hibát okoz StackOverflowException .

Hatékonyság. Rekurzió helyett szinte mindig használhat hurkot. A hurkok nem rendelkeznek az argumentumok átadásának, a további tárolók inicializálásának és az értékek visszaadásának többletterhelésével. A teljesítmény rekurzív hívások nélkül sokkal jobb lehet.

Kölcsönös rekurzió. Előfordulhat, hogy nagyon gyenge teljesítményt, vagy akár végtelen hurkot is megfigyelhet, ha két eljárás hívja egymást. Az ilyen kialakítás ugyanazokat a problémákat mutatja be, mint egy rekurzív eljárás, de nehezebb észlelni és hibakeresést végezni.

Hívás zárójelekkel. Amikor egy Function eljárás rekurzívan hívja meg magát, zárójelekkel kell követnie az eljárás nevét, még akkor is, ha nincs argumentumlista. Ellenkező esetben a függvény neve a függvény visszatérési értékét jelöli.

Tesztelés. Ha rekurzív eljárást ír, nagyon gondosan tesztelje, hogy mindig megfeleljen bizonyos korlátozó feltételeknek. Azt is biztosítania kell, hogy túl sok rekurzív hívás miatt ne fogyjon el a memória.

Lásd még