Potřebu opakování kódu nelze nikdy podceňovat při hledání řešení některých z největších světových problémů. Potřebujete vědět, že v programování má opakování jednu ze dvou forem - iteraci nebo rekurzi.
Cílem je seznámit vás s opakováním v kódu a ukázat, jak jej lze použít k vylepšení vašich programů Java.
Opakované programy vám mohou pomoci vyřešit některé z nejobtížnějších programovacích problémů. Tady je to, co potřebujete vědět, abyste mohli vytvářet rekurzivní programy v Javě.
Pomocí iterace
Iterace používá strukturu smyčky k opakování kódu. Tři typy iteračních struktur jsou smyčka před testem (while), smyčka po testu (do-while) a proti-řízená smyčka (pro).
Tyto iterační struktury fungují opakováním bloku kódu, zatímco zůstává specifická podmínka true, ale jakmile se tato podmínka stane nepravdivou, smyčka se zastaví a program se vrátí do normálu tok.
Například bychom mohli použít jednu z iteračních struktur k vyřešení problému součtu všech celých čísel od 1 do n. V závislosti na použité iterační struktuře bude mít řešení konkrétní formu, ale libovolnou z nich tři iterační struktury mohou poskytnout řešení tohoto problému pomocí následujícího pseudo kód.
Příklad iteračního pseudokódu
START
DECLEARE součet, počítat jako celé číslo
součet = 0
počet = 1
OPAKOVAT
Součet = součet + počet
Počet = počet + 1
DO POČTU> n
KONEC
Výše uvedený pseudokód má dvě proměnné, součet a počet, které jsou inicializovány na 0, respektive 1. Proměnná "count" je inicializována na 1, protože problém, který se snažíme vyřešit, uvádí, že potřebujeme součet všech celých čísel od 1 do n.
Proměnné „n“ bude uživateli přiřazeno náhodné číslo a proměnná „count“ se zvýší o jednu čas provedení smyčky, ale jakmile hodnota proměnné „count“ překročí hodnotu „n“, smyčka bude stop.
Proč používat rekurzi?
Pokud bychom měli zkoumat fakta obklopující iteraci a rekurzi, najdeme několik věcí, které mají být pravdivé.
- Obě metody zahrnují opakování.
- Obě metody vyžadují testovací podmínku, která indikuje, kdy se má zastavit.
- Obě metody lze teoreticky provést navždy, pokud není dána nebo splněna podmínka ukončení.
- Jakýkoli problém, který lze vyřešit pomocí iterace, lze vyřešit také pomocí rekurze a naopak.
Proč bychom tedy chtěli zvolit jednu metodu nad druhou? Jednoduchá odpověď je efektivita. S rekurzí může programátor použít méně kódu k dosažení v podstatě stejného výsledku. Méně kódu znamená, že dochází k významnému snížení možnosti chyb bez povšimnutí.
Rekurze využívá více paměti a je pomalejší než iterace, ale má integrovaný zásobník (datová struktura). S iterací byste museli vybudovat datovou strukturu (v podstatě znovuobjevení kolečka) a nechat svůj program otevřený pro větší možnost nezachycených chyb kvůli extra kódu.
Příbuzný: Výjimky Java: Zacházíte s nimi správně?
Jak funguje rekurze
Rekurze je název daný procesu, kde se funkce opakovaně volá, dokud není splněna konkrétní podmínka. Tato opakující se metoda řeší problémy rozdělením na menší a jednodušší verze.
Každá rekurzivní funkce se skládá ze dvou částí - základního a obecného případu.
Základní struktura příkladu rekurzivní funkce
Funkce(){
// základní případ
// obecný případ
}
Základní případ je část rekurzivní funkce, která řeší problém. Takže kdykoli rekurzivní funkce dorazí do základního případu, program opustí rekurzivní funkci a pokračuje ve svém přirozeném toku.
Obecným případem je část rekurzivní funkce, která se opakuje. To je místo, kde se funkce sama nazývá a kde se provádí velká část práce.
Použití rekurze v Javě
Některé programovací jazyky podporují pouze iteraci, zatímco jiné podporují pouze rekurzi. Naštěstí je Java jedním z jazyků, které podporují obě opakované metody.
V Javě se rekurze používá stejným způsobem jako v jiném jazyce, který ji podporuje. Klíčem je vždy zajistit, aby vaše rekurzivní funkce měla základní a obecný případ v tomto pořadí.
Vraťme se k našemu počátečnímu příkladu součtu, cílem je najít součet všech celých čísel od 1 do n, kde n je celé číslo zadané uživatelem.
Příklad Java rekurze
//rekurzivní funkce
int součet (int n) {
// základní případ
if (n <= 1) {
návrat 1;
}
// obecný případ
jiný{
návrat n + součet (n-1);
}
}
Výše uvedená rekurzivní funkce přebírá celé číslo „n“ a ukončí jeho provádění, pouze pokud je hodnota n menší nebo rovna 1.
Pokud bychom předali celé číslo 5 výše uvedenému programu, proměnná „n“ by převzala hodnotu 5. Hodnota „n“ by pak byla zkontrolována v základním případě, ale vzhledem k tomu, že 5 je větší než 1, „n“ bude nyní předáno do obecného případu.
V tomto příkladu bude obecný případ volat rekurzivní funkci čtyřikrát. Při posledním volání funkce bude hodnota „n“ 1, což bude účinně splňovat požadavky základního případu, což bude mít za následek ukončení rekurzivní funkce a návrat 15.
Změníme-li hodnotu „n“ na 7, rekurzivní funkce se zavolá šestkrát a vrátí 28 před ukončením provádění.
Chcete to vyzkoušet sami? Výše uvedený rekurzivní program můžete spustit pomocí následujícího řádku kódu v hlavní funkci vašeho Java programu.
System.out.println (součet (7));
Co jste se naučili
Pokud jste prošli celým tímto článkem, nyní máte základní znalosti o dvou opakujících se metodách, které se používají v programování. Nyní rozpoznáváte podobnosti mezi iterací a rekurzí a proč by se vývojář rozhodl použít rekurzi nad iterací a jak používat rekurzivní funkci v Javě.
Image Credit: ThisIsEngineering /Pexels
Naučte se základy rekurze, základní, ale pro programátory mírně ohýbající nástroj.
Přečtěte si další
- Programování
- Jáva
Kadeisha Kean je vývojář softwaru a technický / technologický autor. Má výraznou schopnost zjednodušit některé z nejsložitějších technologických konceptů; výroba materiálu, kterému snadno porozumí každý technologický nováček. Vášnivě se věnuje psaní, vývoji zajímavého softwaru a cestování po světě (prostřednictvím dokumentů).
Přihlaste se k odběru našeho zpravodaje
Připojte se k našemu zpravodaji s technickými tipy, recenzemi, bezplatnými elektronickými knihami a exkluzivními nabídkami!
Ještě jeden krok…!
V e-mailu, který jsme vám právě poslali, potvrďte svou e-mailovou adresu.