Popisanie Kódu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Popisanie Kódu – C / C++ – Fórum – Programujte.comPopisanie Kódu – C / C++ – Fórum – Programujte.com

 

Minko0
Newbie
6. 5. 2011   #1
-
0
-

Ahoj chcem sa opýtať prečo je určitá časť kódu zapisana tak ako je lebo podľa mňa to akosi hlupo asi tomu nechapem.
Ide o program ktory Žiada čislo a mocniteľa. Následne to číslo umocni.Ide tam o rekurziu.



ULONG ZiskajMocninu(short int n, short int mocnina)

{

if (mocnina == 1)
return n;
else
return (n * (ZiskajMocninu(n, mocnina - 1));

}


nechapem tomu return (n * (ZiskajMocninu(n, mocnina - 1));

prečo sa zas vola ta ista funkcia... a prečo tam je mocnina - 1 .. a ako to vôbec bude násobiť ked s tou mocninou sa nikde nepracuje ...

Ďakujem za vysvetlenie.





}

Nahlásit jako SPAM
IP: 88.212.32.–
yaqwsx+9
Posthunter
6. 5. 2011   #2
-
0
-

Kód jsme nezkoušel, ale jen při letmém pohledu - němelo by být místo return -1; return n; ? Navíc bych ještě ošetřil nultou a zápornou mocninu.

Nahlásit jako SPAM
IP: 85.160.105.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Minko0
Newbie
6. 5. 2011   #3
-
0
-

Áno ďakujem to -1 tam naozaj nieje to som zle napisal.. ale stále nechápem tomu return (n * (ZiskajMocninu(n, mocnina - 1));

veď keď sa to zas zopakuje to ZiskajMocninu(n, mocnina - 1) tak sa zas preveria podmienky a zas to skonči ako toto...

Nahlásit jako SPAM
IP: 88.212.32.–
ondra.holub+1
Stálý člen
6. 5. 2011   #4
-
0
-

Pokud počítám entou mocninu z x (tedy x^n), kde n je celé kladné číslo, tak můžu využít tuto rovnost:

x^n = x * x^(n-1)

Když to udělám znovu, dostanu

x^n = x * x * x^(n - 2)

A to můžu opakovat tak dlouho, dokud mi nezůstane násobení en iksek.

Takže ten program ví, že první mocnina x je x (to je ta část

if (mocnina == 1) return n;
). Pokud je třeba počítat větší mocninu, využije se výše uvedeného vztahu, že x^n = x * x^(n-1). x se počítat nemusí, násobit také umíme, takže zbývá vypočítat x^(n-1). A pro to se použije ta samá funkce. A tak pořád dokola, dokud se nedojde k první mocnině.

Nahlásit jako SPAM
IP: 194.138.12.–
Minko0
Newbie
6. 5. 2011   #5
-
0
-

To ondra.holub : Ďakujem :) viac menej tomu chapem myslim že ak si to viac krát odskušam tak to pôjde.

Nahlásit jako SPAM
IP: 88.212.32.–
Grungy0
Super člen
6. 5. 2011   #6
-
0
-

To Minko : V tomto prípade sa využíva rekurzia, teda funkcia volá samú seba. Na nete toho bude o tomto určite veľa ak by si sa o tom chcel dozvedieť niečo viac a hlavne v ktorých prípadoch sa to využíva.

Nahlásit jako SPAM
IP: 188.123.100.–
Prvý náznak hlúposti, je pocit geniality.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

Podobná vlákna

Vysvetlenie kodu — založil marek17

Rozbor kodu — založil shockwave

Zakomentování kódu — založil PRojekt

Generovanie kodu — založil Milan

Generator kodu — založil jožkuuuu

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý