Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
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… nový
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. :… nový
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… nový
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… nový
MM.. 20.02.2007 21:55
MM..
rekurzia je nevhodna skoro na vsetko. okrem toho ze sprehladnuje kod, nema ziadny dalsi vyznam. :-p nový
IgorK 20.02.2007 21:58
IgorK
Ma vyznam v specialnych pripadoch, napr. pri nejakom dynamickom vytvarani kombinacii apod (bola by v… nový
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… nový
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š… nový
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… nový
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í… nový
Rce 20.02.2007 23:14
Rce
Ale ved ja netvrdim ze sa neda, pisem o tom kde je to vhodne a kde nie. nový
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.
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
To co je za program, pozeram ze mate vsetci dnes blby den :-) Naco si vytvaras premennu delkaTextu a… nový
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… nový
Flash_Gordon 20.02.2007 22:55
Flash_Gordon
ale s jednym musis suhlasit, ze miesas C a C++ dokopy. :-p nový
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… nový
Flash_Gordon 20.02.2007 23:09
Flash_Gordon
vsak ano. ja len tak. :-p;-) nový
IgorK 20.02.2007 23:11
IgorK
Robis veci zbytocne komplikovane. substring, zbytocne premenne... Ja som si zvykol automaticky pisat… nový
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? nový
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… nový
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).

este raz. rekurzia sluzi len na sprehladnenie kodu(co som uz spominal), vsetko sa da napisat bez nej. prinasa do kodu len zvysenu reziu ohladne volania funkcii(odkladanie lokalnych premennych a navratovych hodnot). ale ja ti to vyvracat nebudem, kludne ju pouzivaj. :-p:-)

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]));

Nesouhlasím. Mám to tam sice jen symbolicky, ale jednu věc jsem zatajil.
Výpis do printf by měl obsahovat ještě "substring" od zadu postupně kupředu.

Nicméně je pravda, že napsané to tam nemám.
To co píšeš je jen další možné řešení, ne však jediné.

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