nisfarm.ru

Rekurzivní algoritmus: popis, analýza, funkce a příklady

Moderní chápání rekurze: definice funkčnosti a přístup k ní zvenčí a z této funkce. To je věřil, že recursion se narodil matematiky: faktoriální výpočet, nekonečné série, fraktály, kontinuální frakce ... Nicméně rekurze lze nalézt všude. Objektivní zákony přírody, „věřit“ rekurze algoritmus a jeho hlavní forma výrazu (bytí) není tolik předměty hmotného světa, stejně jako základní algoritmus pohybu.

rekurzivní algoritmus

Lidé různých specialit v různých oborech vědy a techniky používají rekurzivní algoritmus f (x), kde "x ~ / = f (x)". Funkce, která sama volá, je silným řešením, ale formování a pochopení tohoto řešení je ve většině případů velmi náročným úkolem.

Ve starověku byla rekurze použita ke zvětšení prostoru paláce. Prostřednictvím zrcadlového systému proti sobě můžete vytvářet úžasné volumetrické prostorové efekty. Ale je snadné pochopit, jak nastavit tato zrcadla? A je ještě obtížnější zjistit, kde se nachází místo ve vesmíru, které se odráží v několika zrcadlech.

Rekurze, rekurzivní algoritmy: význam a syntaxe

Úloha, která je formulována opakováním sekvence operací, může být řešena rekurzivně. Jednoduchý algoritmus (výpočet kvadratické rovnice, skript pro vyplnění webové stránky s informacemi, čtení souboru, odeslání zprávy ...) nevyžaduje použití rekurze.

Hlavní rozdíly algoritmu, který umožňuje rekurzivní řešení:

  • existuje algoritmus, který musí být několikrát proveden;
  • algoritmus potřebuje data, která se mění vždy;
  • Algoritmus se nemusí pokaždé měnit;
  • existuje konečná podmínka: algoritmus je rekurzivní - ne nekonečný.

Obecně nelze tvrdit, že jediná exekuce je povinnou podmínkou pro neexistenci příležitosti rekurze. Nemůžete také vyžadovat povinnou konečnou podmínku: nekonečné rekurze mají svou vlastní oblast použití.

Algoritmus je rekurzivní: když se sekvence operací provádí opakovaně, na datech, které se mění vždy a vždy dávají nový výsledek.

Rekurzní vzorec

Matematické chápání rekurze a jejích analogů v programování jsou různé. Matematika, ačkoli charakteristická pro programování, ale programování je mnohem vyšší řádek matematiky.

rekurzivní algoritmus f

Dobře napsaný algoritmus je jako zrcadlo autorova intelektu. Obecný rekurzní vzorec v programování "f (x)", kde "x ~ / = f (x)" má alespoň dvě varianty interpretace. Zde je "~" podobnost nebo nepřítomnost výsledku a "=" je přítomnost výsledku funkce.

První možnost: dynamika dat.

  • funkce "f (x)" má algoritmus rekurzivní a není variabilní;
  • "X" a výsledek "f (x)" - vždy mají nové hodnoty, výsledek "f (x)" je nový parametr "x" této funkce.

Druhá možnost: dynamika kódu.

  • funkce "f (x)" má několik algoritmů, které zpřesňují (analyzují) data;
  • analýza dat - jedna část kódu a implementace rekurzivních algoritmů, které provádějí požadovanou akci - druhá část kódu;
  • výsledek funkce "f (x)" není.

Nedostatek výsledku je normální. Programování není matematika, výsledek nemusí být nutně tam. Funkce, která se provádí rekurzivně, může jednoduše analyzovat místa a naplnit databázi nebo vytvořit požadované instance objektů podle příchozího vstupního toku.

Data a rekurze

Programování rekurzivních algoritmů není výpočtem faktoru, v němž funkce přijímá pokaždé, když daná funkce je odlišná od jedné k menší nebo větší straně - implementační varianty závisí na přednost vývojáře.




Bez ohledu na to, jak je považováno za faktoriálem „8!“, Přechod z 0, 1, 2, ..., nebo naopak 8, 7, 6 ... Podobně výpočtu matematický sekvence, fraktální nebo nekonečné řady je zaznamenána, a jednoduchý matematický vzorec, v tomto pořadí, algoritmus, který striktně dodržuje tento vzorec.

Zpracování informací je "matematika" úplně jiného pořadí. Rekurzivní funkce a algoritmy zde pracují s písmeny, slovy, frázemi, větami a odstavci. Každá další úroveň používá předchozí.

Vstupní datový tok je analyzován v širokém spektru podmínek, ale proces analýzy je obecně rekurzivní. Nemá smysl psát jedinečné algoritmy pro všechny varianty vstupního toku. Musí existovat jeden funkční. Zde jsou rekurzivní algoritmy příklady toho, jak generovat výstupní proud, který je adekvátní vstupu. Toto není výsledek zadání rekurzivního algoritmu, ale toto je požadované a nezbytné řešení.

Abstrakce, rekurze a OOP

Objektově orientované programování (OOP) a rekurze jsou zásadně odlišné entity, ale dokonale se doplňují. Abstrakce nemá nic společného s rekurzí, ale díky hranolu OOP je možné realizovat kontextuální rekurze.

Například informace jsou analyzovány a vystupovat samostatná písmena, slova, fráze, věty a odstavce. Je zřejmé, že vývojář zajistí vytvoření instancí objektů těchto pěti typů a nabídne řešení rekurzivních algoritmů na každé úrovni.

programování rekurzivních algoritmů

Mezitím, pokud na úrovni písmen "není smysl hledat smysl", sémantika se objevuje na úrovni slov. Slova můžete rozdělit na slovesa, podstatná jména, příslovce, předmluvy ... Můžete jít dál a definovat případ.

Na úrovni frází je sémantika doplněna znaménkem interpunkce a logikou kombinace slov. Na úrovni vět je nalezena pokročilejší úroveň sémantiky a tento odstavec lze považovat za úplnou myšlenku.

Objektově orientovaný vývoj předurčuje dědičnost vlastností a metod a navrhuje zahájení hierarchie objektů od vytvoření absolutně abstraktního předka. Ve stejné době, není pochyb o tom, analýza každé dítě bude rekurzivní charakter a příliš neliší na technické úrovni o mnoho položek (písmen, slov, frází a vět). Odstavce, jako dokončené myšlenky, mohou vyjít z tohoto seznamu, ale ne podstatu.

Je důležité, aby drtivá část algoritmu mohla být formulována na úrovni abstraktního předchůdce, vylepšovat ji na úrovni každého potomstva pomocí dat a metod nazvaných z abstraktní úrovně. V této souvislosti abstrakce otevírá nové obzory pro rekurzi.

Historické rysy OOP

OOP přišel do světa programů dvakrát, ačkoli někteří odborníci mohou zvýraznit vznik technologií cloud a moderních myšlenek o objektech a třídách jako o novém kole vývojových technologií.

Pod pojmem „subjekt“ a „objekt“ v tomto kontextu OOP, obvykle přičítán 50. a 60. letech minulého století, ale spojit je s 1965 a příchodem Simula jazyka Lisp, Algol, Smalltalk.

V těch dnech nebyla programování příliš zvláštní a nemohla odpovídajícím způsobem reagovat na revoluční koncepce. Před bojem o myšlenky a programovací styly (C / C + + a Pascal - většinou) to bylo ještě daleko a databáze se stále vytvářely koncepčně.

rekurzivní rekurzivní algoritmy

Na konci 80. let a počátku 90. let Pascal objevily předměty a všechny myšlenky tříd v C / C ++ - to označilo nové kolo zájmu PLO, a to je, když nástroje, zejména programovací jazyky se staly nejen podpora objektově orientované nápady, ale také podle nich.

Samozřejmě, jestliže dřívější rekurzivní algoritmy byly prostě funkcemi, které se používají ve všeobecném kódu programu, nyní by se rekurze mohla stát součástí vlastností objektu (třídy), který v kontextu dědičnosti poskytoval zajímavé možnosti.

Funkce moderního OOP

Vývoj OOP zpočátku deklaroval objekty (třídy) jako sbírku dat a vlastností (metod). Ve skutečnosti se jednalo o data, která mají syntaxi a význam. Ale pak nebylo možné reprezentovat OOP jako nástroj pro správu skutečných objektů.

rekurzivní funkce a algoritmy

OOP se stal nástrojem pro správu objektů "počítačové přírody". Skript, tlačítko, položka nabídky, panel nabídek, značka v okně prohlížeče je objekt. Ale ne jako obráběcí stroj, potravinářský výrobek, slovo nebo nabídku. Skutečné objekty zůstaly mimo rámec objektově orientovaného programování a počítačové nástroje získaly novou inkarnaci.

Kvůli rozdílům mezi populárními programovacími jazyky se objevilo mnoho dialektů OOP. Sémanticky jsou prakticky rovnocenné, a jejich zaměření na instrumentální sféře, nikoli aplikace, umožňuje, aby se popis reálných objektů mimo algoritmů a zajistí jejich multiplatformní a cross-language „existenci“.

Stohy a mechanismy pro volání funkcí

Mechanismy volání funkcí (postupy, algoritmy) vyžadují přenos dat (parametrů), návrat výsledku a uložení adresy operátora, který musí po ukončení funkce (procedury) přijmout kontrolu.

příklady rekurzivních algoritmů

Typicky se pro tyto účely používá zásobník, ačkoli programovací jazyky nebo samotný vývojář programátor může poskytnout širokou škálu možností přenosu řízení. Moderní programování umožňuje, že název funkce může být nejen parametrem: může být vytvořen během provádění algoritmu. Algoritmus může být také vytvořen během provádění jiného algoritmu.

Pojem rekurzivních algoritmů, když jejich jména a tělo může být stanovena v okamžiku úkolu (vyberte požadovaný algoritmus) rekurzívnost se vztahuje nejen na to, jak něco udělat, ale kdo přesně by to mělo dělat. Výběr algoritmu pro jeho "smysluplné" jméno je slibný, ale vytváří potíže.

Zpětná vazba na soubor funkcí

Nelze říci, že algoritmus je rekurzivní, když se volá sám a pouze. Programování není dogma, ale pojem rekurzivita není výhradním požadavkem volat se z těla svého vlastního algoritmu.

Praktické aplikace ne vždy poskytují čisté řešení. Často by měly být připraveny zdrojové údaje a výsledek rekurzivního volání musí být analyzován v kontextu celého úkolu (celého algoritmu) jako celku.

Ve skutečnosti, a to nejen před voláním rekurzivní funkce, ale i po jejím dokončení, může být nebo musí být vyvolán jiný program. Pokud se u hovoru nevyskytují žádné zvláštní problémy: rekurzivní funkce A () volá funkci B (), která něco dělá a volá A (), pak je problém s návratem řízení. Po splnění rekurzivního volání by měla funkce A () získat kontrolu, aby znovu vyvolala B (), která ji znovu zavolá. Návrat kontroly, následně v pořadí zpět do B () - špatné rozhodnutí.

Programátor není omezen při volbě parametrů a může být vybaven názvy funkcí. Jinými slovy, ideálním řešením je předat jméno B () na A () a nechat A () volání do B (). V tomto případě nebudou problémy s návratností kontroly a implementace rekurzivního algoritmu bude transparentnější.

Porozumění a úroveň rekurze

Problémem při vývoji rekurzivních algoritmů je, že potřebujete mít představu o dynamice procesu. Při použití rekurze v objektových metodách, zejména na úrovni abstraktního předka, se objevuje problém porozumění vlastnímu algoritmu v souvislosti s jeho prováděním.

řešení rekurzivních algoritmů

V současné době neexistují žádná omezení na úrovni vnoření funkcí a schopností v mechanismech zásobník volání, ale tam je problém porozumění jakém okamžiku úroveň dat, nebo jaký druh místa v obecném algoritmu, aby se volání rekurzivní funkce a na kolik sama říká, že je.

Existující ladicí nástroje jsou často bezmocné, aby programátorovi řekly správné řešení.

Cykly a rekurze

Předpokládá se, že cyklické provedení odpovídá rekurzi. V některých případech lze rekurzivní algoritmus implementovat v syntaxi podmíněných a cyklických konstrukcí.

Nicméně, pokud existuje jasná shoda, že specifická funkce musí být provedena pomocí rekurzivního algoritmu, by měla opustit žádný externí možnost používat smyčku nebo podmíněné příkazy.

implementace rekurzivních algoritmů

Zde je to, že rekurzivní řešení ve formě funkce, která se sama používá, bude kompletní, funkčně kompletní algoritmus. Tento algoritmus bude vyžadovat programátorské úsilí při jeho tvorbě, pochopení dynamiky algoritmu, ale bude konečným řešením, které nevyžaduje externí kontrolu.

Jakákoliv kombinace externích podmíněných a cyklických operátorů nám neumožní reprezentovat rekurzivní algoritmus ve formě úplné úplné funkce.

Konsensus rekurze a OOP

Téměř ve všech variantách vývoje rekurzivního algoritmu vzniká plán na vývoj dvou algoritmů. První algoritmus tvoří seznam budoucích objektů (instancí) a druhý algoritmus je správnou rekurzivní funkcí.

Nejlepším řešením by bylo uspořádat v jedné rekurze vlastnosti (metoda) ve skutečnosti obsahují rekurzivní algoritmus, a všechny přípravky, aby se konstruktor.

Rekurzivní algoritmus bude správným řešením pouze tehdy, když pracuje samostatně, bez externí kontroly a kontroly. Externí algoritmus může dát signál pouze k práci. Výsledkem této práce by mělo být očekávané řešení bez externí podpory.

Rekurze musí být vždy úplné nezávislé rozhodnutí.

Intuitivní porozumění a funkční úplnost

Když se objektově orientované programování stalo de facto standardem, bylo zřejmé: pro efektivní kódování je třeba změnit vlastní myšlení. Programátor se musí přesunout ze syntaxe a sémantiky jazyka do dynamiky sémantiky během provádění algoritmu.

Charakteristický rys rekurze: lze jej aplikovat ve všem:

  • analýza stránek -
  • operace vyhledávání -
  • analyzovat textové informace -
  • čtení nebo vytváření MS Word-
  • vzorkování nebo analýza značek ...

Charakteristickým rysem OOP: to umožňuje popsat rekurzivní algoritmus na úrovni abstraktního předka, ale patří do něj jedinečnou výzvu potomků, z nichž každý má své vlastní palety údaje a vlastnosti.

koncept rekurzivních algoritmů

Rekurze je ideální, protože vyžaduje funkční úplnost jejího algoritmu. OOP zlepšuje kvalitu rekurzivního algoritmu a poskytuje mu přístup ke všem jedinečným potomkům.

Sdílet na sociálních sítích:

Podobné
© 2021 nisfarm.ru