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. :…
host 20.02.2007 21:33
host
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 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..

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

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