V tomto tutoriálu uvidíme Rekurze s příklady v Pythonu. Rekurze v programování je velmi silná technika, provádí se pomocí funkcí, které si samy říkají, považujte to za druh smyčky, protože stejný kód se bude několikrát opakovat, dokud nebude dosaženo řešení.
Charakteristiky, které musí mít rekurzivní funkceZákladní případUmožní nám to v určitém okamžiku ukončit funkci a nedochází k nekonečným voláním.
Rekurzivní případV tomto případě voláme funkci znovu, ale přiblížíme se k řešení. V příkladech to bude vypadat lépe.
PoznámkaJe důležité mít jasno o základním případě a vědět, že rekurzivní případ se k němu blíží a nevstupuje do stavu nekonečných hovorů, je to běžná chyba při zahájení rekurze.
Pojďme k příkladům, které budou jednoduché a krátké, aby je bylo možné dobře asimilovat.
Příklad 1 - Faktoriál
V tomto případě budeme vyřešit faktoriál číslaPokud chcete vědět, o čem je faktoriál, navštivte tento odkaz. Zde je kód a níže vysvětluji rekurzivní funkci.
def factorial (number): if (number == 0 or number == 1): return 1 else: return number * factorial (number-1) if __name__ == "__main__": try: num = int (input ("From Jakého čísla chcete znát faktoriál? ")) If (num <0): print (" Číslo musí být větší nebo rovno 0 ") else: print (" Faktoriál ", num," je ", faktoriál (počet)) kromě: tisk (" Očekává se číslo ")Naše rekurzivní funkce má základní případ v if a rekurzivní v jiném. Můžete vidět, že základní případ vrací 1 a že toho je dosaženo, když je parametr předaný funkci 0 nebo 1, když je tento případ dosažen, funkce se znovu neozve. V rekurzivním případě máme volání funkce k sobě, ale jak vidíte snížení parametru o 1 (dostáváme se blíže k základnímu případu). Poslední část kódu mimo funkci je zodpovědná pouze za to, že požádá uživatele o číslo a zkontroluje, zda je pro volání funkce větší nebo rovna 0, protože faktoriál se zápornými čísly nefunguje.
Pokud zavoláme funkci s číslem 4, tj. Faktoriálem (4), máme následující volání:
Výzva 1: faktoriál (4) Výzva 2: 4 * faktoriál (3) Výzva 3: 3 * faktoriál (2) Výzva 4: 2 * faktoriál (1)Při volání faktoriálu s 1 již nejsou žádná volání a vrátí 1, pak tato funkce vrátí výsledky do funkce, kterou nazývám, návrat bude vypadat takto:
faktoriál (1) = 1 faktoriál (2) = 2 * 1 faktoriál (3) = 3 * 2 faktoriál (4) = 4 * 6A už máme výsledek, který je 24, z vynásobení čísel: 1 * 2 * 3 * 4. Dále nechávám snímek obrazovky při žádosti o faktoriál 5, což není nic jiného než vynásobení 5 faktoriálem 4 (o kterém již víme, že je 24), což ve výsledku dává 120. Můžete také vidět, že pokud uživatel vloží číslo špatně, je to:
Příklad 2 - Sčítání / odčítání
V tomto příkladu jsem dal rekurzivní funkci pro sčítání nebo odčítání, tento příklad se samozřejmě v reálném životě nevyskytuje, ale jako příklad funguje:
def operovat (číslo1, číslo2): if (číslo2 == 0): návratové číslo1 elif (číslo2 <0): návratové operace (číslo1-1, číslo2 + 1) else: návratové operace (číslo1 + 1, číslo2-1) pokud __name__ == "__main__": tisk ("Přidání 10 a 3:", ovládání (10, 3)) tisk ("Přidání 5 a -2:", ovládání (5, -2))Zde máme základní případ a 2 rekurzivní případy, abychom věděli, jakým způsobem se dotknout, protože v závislosti na tom, zda je číslo kladné nebo záporné, budeme muset jednat jinak. Operační funkce přijímá 2 čísla a algoritmus se postará o odečtení nebo přidání jednoho k číslu 2 a jeho předání k číslu 1 (Pokud je číslo 2 kladné, odečtu 1 od čísla 2 a přidám jej k číslu 1), takže dokud proměnná číslo 2 nebude stejná do 0.
Například přidáme 3 + 2 při sledování hovorů.
Výzva 1: ovládání (3,2) Výzva 2: ovládání (4,1) Výzva 3: ovládání (5,0)V tomto případě, když se dostaneme do provozu (5,0), nelze dělat nic jiného, máme výsledek přímo (na rozdíl od faktoriálu, který musel provést násobení). Zde je výsledek spuštění kódu:
PoznámkaAčkoli s rekurzí máme elegantní řešení a normálně kratší, mělo by být použito, když nemáme jinou možnost, pokud dokážeme využít jeho iterační variantu, bude to lepší volba, protože spotřebovává méně paměti a je obvykle rychlejší.
Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod