Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Rekurzivní procedura je taková, která volá sama sebe. Obecně platí, že toto není nejúčinnější způsob psaní kódu jazyka Visual Basic.
Následující postup používá rekurze k výpočtu faktoriálu původního argumentu.
Function Factorial(n As Integer) As Integer
If n <= 1 Then
Return 1
End If
Return Factorial(n - 1) * n
End Function
Úvahy o rekurzivních procedurách
Omezení podmínek. Je nutné navrhnout rekurzivní proceduru pro testování alespoň jedné podmínky, která může ukončit rekurze, a musíte také zpracovat případ, kdy není taková podmínka splněna v přiměřeném počtu rekurzivních volání. Bez alespoň jedné podmínky, která může být splněna bez selhání, váš postup nese vysoké riziko upadnutí do nekonečné smyčky.
Využití paměti. Aplikace má omezený prostor pro místní proměnné. Pokaždé, když procedura volá sama sebe, používá více místa pro další kopie místních proměnných. Pokud tento proces pokračuje po neomezenou dobu, nakonec způsobí StackOverflowException chybu.
Efektivita. Smyčku můžete téměř vždy použít místo rekurze. Smyčka nevyžaduje přidanou režii pro předávání argumentů, inicializaci dodatečného úložiště a vracení hodnot. Výkon může být mnohem lepší bez rekurzivních volání.
Vzájemná rekurze Můžete sledovat velmi špatný výkon, nebo dokonce nekonečnou smyčku, pokud se dvě procedury navzájem volají. Takový návrh představuje stejné problémy jako jeden rekurzivní postup, ale může být obtížnější rozpoznat a ladit.
Volání pomocí závorek Pokud se procedura Function
volá rekurzivně, musíte postupovat podle názvu procedury s závorky, i když neexistuje žádný seznam argumentů. V opačném případě se název funkce považuje za reprezentaci návratové hodnoty funkce.
Testování. Pokud napíšete rekurzivní proceduru, měli byste ji velmi pečlivě otestovat, abyste měli jistotu, že vždy splňuje určité omezující podmínky. Měli byste také zajistit, že se nemůže stát, že kvůli příliš velkému počtu rekurzivních volání dojde k nedostatku paměti.