Předmět Autor Datum
No to by snad nemělo být tak těžký, ne? Větu uložíš do stringu a pak např. pomocí cyklu FOR nebo WHI…
host 20.02.2007 21:10
host
To je fikany. Musel jsem na to chvili koukat, nez jsem pochopil, jak to pracuje. Chudak profesor...…
Jan Fiala 20.02.2007 21:21
Jan Fiala
proč? Vždyť je to typický příklad rekurze. Náš profesor informatiky na gymplu si v těchhle hříčkách…
touchwood 20.02.2007 21:27
touchwood
Výhoda rekurzívity je: - jednoduchosť zápisu Nevýhoda: - pri mnohonásobných volaniach (nebýva to zv…
msx. 21.02.2007 00:49
msx.
No to víš, originální řešení udělá větší dojem než nějaký cyklus FOR, který zvládne kdejaka lamka. :…
host 20.02.2007 21:33
host
Vše má své pro a proti. For je klasika, o které nemusíš přemýšlet, víš že bude fungovat a jak bude f…
Jan Fiala 20.02.2007 21:45
Jan Fiala
Rekurzia je na toto nevhodna. Neefektivne to pracuje s pamatou, nie je tam kontrola na velkost vstup…
MM.. 20.02.2007 21:55
MM..
rekurzia je nevhodna skoro na vsetko. okrem toho ze sprehladnuje kod, nema ziadny dalsi vyznam. :-p
IgorK 20.02.2007 21:58
IgorK
Ma vyznam v specialnych pripadoch, napr. pri nejakom dynamickom vytvarani kombinacii apod (bola by v…
MM.. 20.02.2007 22:05
MM..
este raz. rekurzia sluzi len na sprehladnenie kodu(co som uz spominal), vsetko sa da napisat bez nej…
IgorK 20.02.2007 22:23
IgorK
Musím s Igorem souhlasit. Vše jde přepsat do cyklů nebo iterací bez použití rekurze a je to rychlejš…
Rce 20.02.2007 22:41
Rce
To je pravda, ale nesouhlasím s tím, že rekurze .... "Ve školách se obvykle vykládá,že rekurse je ge…
Flash_Gordon 20.02.2007 23:07
Flash_Gordon
Ty myšlenky jsou nádherné :beer:. //Edit: V dobách mého mládí se teprva objevovaly jazyky, umožňují…
Rce 20.02.2007 23:14
Rce
Ale ved ja netvrdim ze sa neda, pisem o tom kde je to vhodne a kde nie.
MM.. 21.02.2007 00:25
MM..
Rekurzia je veľmi dobrá pri jednoduchom šachovom algoritme. Jednoduchý preto, lebo netreba kontrolov… poslední
msx. 21.02.2007 00:51
msx.
for i := Length(veta) downto 1 do write(veta[i]);
Jan Fiala 20.02.2007 21:14
Jan Fiala
to už jsou zase zkoušky? nebo před vysvědčením? 3-[
touchwood 20.02.2007 21:16
touchwood
to víš, prázdniny skončily, studenti za ten týden zapomněli, co probrali za půl roku, tak se musí do…
Jan Fiala 20.02.2007 21:26
Jan Fiala
1 ) Větu uložíš do stringu 2 ) zjištíš délku stringu 3 ) Ve foru to vytiskneš v opačném pořadí nějak…
Flash_Gordon 20.02.2007 21:17
Flash_Gordon
jj, mě se takto dost často "přihodí" taky JaFi nebo Host. Mám nutkání je smazat:!::>::x: :beer:;-)
touchwood 20.02.2007 21:29
touchwood
To co je za program, pozeram ze mate vsetci dnes blby den :-) Naco si vytvaras premennu delkaTextu a…
MM.. 20.02.2007 22:02
MM..
Nesouhlasím. Mám to tam sice jen symbolicky, ale jednu věc jsem zatajil. Výpis do printf by měl obsa…
Flash_Gordon 20.02.2007 22:55
Flash_Gordon
ale s jednym musis suhlasit, ze miesas C a C++ dokopy. :-p
IgorK 20.02.2007 22:57
IgorK
No...... a co :-D Šák to funguje. //edit A už nech toho porypování a napiš článek o hackování jak…
Flash_Gordon 20.02.2007 23:09
Flash_Gordon
vsak ano. ja len tak. :-p;-)
IgorK 20.02.2007 23:11
IgorK
Robis veci zbytocne komplikovane. substring, zbytocne premenne... Ja som si zvykol automaticky pisat…
MM.. 21.02.2007 00:31
MM..
Kompletní domácí úkol pro Delphi: program Project1; {$APPTYPE CONSOLE} uses SysUtils; var s: string…
Jan Fiala 20.02.2007 21:28
Jan Fiala
downto 0? Nema packal indexy od 1?
MM.. 20.02.2007 21:56
MM..
Pro sting to melo byt skutecne 1. Ale protoze string je v Delphi AnsiString, tak je v indexu 0 uloze…
Jan Fiala 20.02.2007 22:20
Jan Fiala

proč? Vždyť je to typický příklad rekurze. Náš profesor informatiky na gymplu si v těchhle hříčkách liboval; dodnes si pamatuju, jak nás nutil programovat 3D programy (to bylo v roce 92), od té doby nemám rád vektory ;-). Dneska už jsem to skoro všechno pozapomínal, ale vím, že pomocí rekurze šlo zprasit kdeco..

Vše má své pro a proti. For je klasika, o které nemusíš přemýšlet, víš že bude fungovat a jak bude fungovat a je napsaná za pár sekund.
U rekurzí si musíš dávat velký pozor na to, zda jsi na něco nezapomněl a jestli se ti to v nejméně vhodném okamžiku nekde nazacyklí nebo to nepřeskočí půl struktury. Výsledkem je geniální kód, nad kterým jsi strávil pár hodin... :-P

Ma vyznam v specialnych pripadoch, napr. pri nejakom dynamickom vytvarani kombinacii apod (bola by vhodna napr na predposlednu perm.programming challenge na HTS :)) ale potom som to aj tak prerobil inac nech to je rychlejsie, s rekurziou to ale mohlo byt kratsie a paradoxne prehladnejsie).

Musím s Igorem souhlasit. Vše jde přepsat do cyklů nebo iterací bez použití rekurze a je to rychlejší. Rekursivní je samozřejmě čitelnější a robustnější. Obzvlášť v simulací automatů nebo metody různých stromových struktur. Ale i to lze napsat bez rekurze :-). Ve školách se obvykle vykládá, že rekurse je geniální na všechno a nepředpokládá se konečná velikost paměti počítače :)).

To je pravda, ale nesouhlasím s tím, že rekurze ....
"Ve školách se obvykle vykládá,že rekurse je geniální na všechno a nepředpokládá se konečná velikost paměti počítače"

Například u mě si učitel všiml, že i když mi jeden program fungoval tak byl řešen jeden důležitý krok voláním funkce
rekurzivně. Hned mi řekl co a jak ! A ani si nepamatuji, že by nějaký učitel ve vzorových příkladech rekurzi vůbec
podstrkoval. Asi na to mají intuitivní reflex a vyhýbají se tomu.

Sám když se nas**u tak první co udělám je, že kašlu na rekurzi a šup tam s ní... :-D

Takové ty chlácholíve myšlenky:

1 ) Tenhle program stejně nikdo nebude používat.....
2 ) Pokud nebude platit 1) tak stejně ne dost dlouho aby se to projevilo.....
3 ) Je to jen cvičně ve škole......
4 ) Stejně to nikdy dělat nebudu....
5 ) Kdyby náhodou tak to předělám později....... :))

Ty myšlenky jsou nádherné :beer:.

//Edit: V dobách mého mládí se teprva objevovaly jazyky, umožňující rekurzi (Algol) a tak byl rekursivní boom. K tomu tenkrát kapacita paměti sálového (!!) počítače 64KB a bylo vymalováno. Pamatuji na oblíbený rekursivní algoritmus na výpočet faktoriálu. Tam přeplnění stacku nehrozilo, neboť při výpočtu cca 80! vypuklo daleko dřív numerické přetečení :-D.

1 ) Větu uložíš do stringu
2 ) zjištíš délku stringu
3 ) Ve foru to vytiskneš v opačném pořadí nějak takto:

v C++ takto:

string mujText; // předpokládejme, že už je v něm věta
int delkaTextu = mujText.lenght(); //naplníme délkou textu


for (i = 0; i<mujText.lenght(); i++)
{
printf...... --delkaTextu;  // tohle mam zkracene

}

// edit

Když jsem to ťukal nebyl tu JaFi.... :-D

To co je za program, pozeram ze mate vsetci dnes blby den :-)
Naco si vytvaras premennu delkaTextu a naco ju v cykle znizujes, ked ju nikde nepouzivas? V cykle bude snad nieco ako printf("%c", (int)(mujText[i]));
... P.S. resp cely ten cyklus ma byt naopak, for(i=mujText.length(); i>0; i--)
a potom printf("%c", (int)(mujText[i-1]));

Robis veci zbytocne komplikovane. substring, zbytocne premenne... Ja som si zvykol automaticky pisat veci efektivne, ma to 2 vyhody: a) pisem 2x menej :)) b)nemam zbytocny problem s kozistenciou rovnakej informacie vo viacerych premennych, hlavne po pripadnych zmenach programu (vsimni si ze mas to iste (dlzku) na 2miestach (v 2premennych), ak sa zmeni nieco musis menit vsetky miesta = potencialne riziko).
P.S. jasne ze v 3riadkoch to je jedno, ale taketo navyky ludia prenasaju aj do komplikovanych projektov a potom maju problem. Rovnaka informacia nema co hladat na 2miestach.

Kompletní domácí úkol pro Delphi:

program Project1;
{$APPTYPE CONSOLE}
uses
  SysUtils;
var
  s: string;
  i: Integer;
begin
  Write('Zadejte vetu: ');
  ReadLn(s);
  for i := Length(s) downto 1 do
    Write(s[i]);
  Readln(s);  // jen pockame na stisk klavesy
end.

P.S. opravena spodni hranice cyklu po upozorneni MM

Zpět do poradny Odpovědět na původní otázku Nahoru