NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Rekurze

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:11.4.2013 9:11

To je pravda, akorát nerekurzívní průchod adresářovým stromem je trochu opruz a určitě je lepší ho dělat rekurzívně.

Odpovědět
11.4.2013 9:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:11.4.2013 11:15

Rekurze se obchází přes zásobník, i ten průchod adresářovým stromem je tak lepší, nemůže se pak stát, že by program spadl kvůli StackOverflow na příliš velkém/rozsáhlém adresáři a i režie (volání funkce má nějakou režii) je o něco málo menší.

Odpovědět
11.4.2013 11:15
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:11.4.2013 11:25

"Premature optimization is the root of all evil"

Filesystém má určitá omezení. Dřív narazíš na tato omezení, než na StackOverflow.

O režii rekurze v případě procházení filesystémem nemá smysl diskutovat. Je zcela zanedbatelná.

Editováno 11.4.2013 11:25
Odpovědět
11.4.2013 11:25
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:11.4.2013 11:26

Takhle nějak by vypadalo procházení adresářů ve složce bez rekurze, přes zásobník:

private List<String> VratVsechnySlozky(String slozka)
{
  Stack<String> zasobnik = new Stack<string>();
  List<String> tmp = new List<String>();

  zasobnik.Push(slozka);

  while (stack.IsNotEmpty)
  {
    String adresar = stack.Pop();
    foreach (String dir in Directory.GetDirectories(adresar))
    {
      stack.Push(dir);
      tmp.Add(dir);
    }
  }

  return tmp;
}
Odpovědět
11.4.2013 11:26
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:11.4.2013 11:40

Jenže máš výstup v jiném pořadí, než bys ho získal rekurzí. Záleží na tom, které pořadí v aplikaci potřebuješ.

Odpovědět
11.4.2013 11:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:11.4.2013 12:04

Rekurzi bys ty slozky ziskal ve stejnem poradi, zalezi jen na tom, jak je napsana ta rekurze :)

Odpovědět
11.4.2013 12:04
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:11.4.2013 12:07

Samotná rekurze je vnitřně taky řešena přes zásobník.

Odpovědět
11.4.2013 12:07
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:11.4.2013 12:19

Představ si, že v adresáři mám podadresáře pojmenované jmény autorů. V těchto podadresářích mám jako soubory jejich články. Chci převést tuto strukturu do jednoho souboru XML tak, abych měl uvnitř elementu autor elementy s jejich články. To je typický průchod stromem, tzv. traverzování. Ten tvůj algoritmus to neudělá.

Rekurze je vnitřně řešena přes zásobník. Nevidím tedy důvod, proč bych měl rekurzi přes zásobník obcházet.

Editováno 11.4.2013 12:21
Odpovědět
11.4.2013 12:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:11.4.2013 12:29

V jazycích jako je např. XSLT, bys byl bez rekurze úplně v loji, protože tam nejdou měnit hodnoty proměnných. Všechny jsou totiž final.

Odpovědět
11.4.2013 12:29
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:11.4.2013 12:46

"Představ si, že v adresáři mám podadresáře pojmenované jmény autorů. V těchto podadresářích mám jako soubory jejich články. Chci převést tuto strukturu do jednoho souboru XML tak, abych měl uvnitř elementu autor elementy s jejich články"
Jak chceš tohle řešit rekurzivně? Tady nic k řešení rekurzivně není, když máš ve složce podsložky s jmény autorů a v nich soubory s jejich články, tak je tady rekurze úplně zbytečná, stačí ti dva vnořené cykly.

Nemůžeš srovnávat deklarativní (XSLT) jazyky s imperativními (java, C, psacal, atd.), tam se všechno řeší jinak...

Odpovědět
11.4.2013 12:46
https://www.facebook.com/peasantsandcastles/
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 85.