Portál AbcLinuxu, 12. května 2025 08:27

Dotaz: Programátorský oříšek

11.8.2011 15:56 motorcb | skóre: 12
Programátorský oříšek
Přečteno: 1082×
Odpovědět | Admin
Jaký výsledek vrátí tato funkce?
long fak(a) {
return a * fak(a-1);
}

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

AraxoN avatar 11.8.2011 16:20 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Programátorský oříšek
Odpovědět | | Sbalit | Link | Blokovat | Admin
Že by long ?
11.8.2011 16:37 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
Rozbalit Rozbalit vše Re: Programátorský oříšek
Odpovědět | | Sbalit | Link | Blokovat | Admin

Teoreticky 0, ale prakticky zadny, protoze neskonci. Respektive skonci i se zahlcenim systemu, pretecenim zasobniku nebo necim podobnym nezdravym. Nikde tam totiz nemas kontrolu na ukonceni.

Dejv

Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
11.8.2011 16:47 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Programátorský oříšek
Odpovědět | | Sbalit | Link | Blokovat | Admin
Stack overflow.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
11.8.2011 21:06 jekub
Rozbalit Rozbalit vše Re: Programátorský oříšek
ne nutně, neznáte-li typ parametru
11.8.2011 22:05 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Programátorský oříšek
Stack overflow nebo úplně jinou chybu/vyjímku.
PS: A kdyby ten typ byl co, tak by to bylo co? :-)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
12.8.2011 09:39 jekub
Rozbalit Rozbalit vše Re: Programátorský oříšek
sám jste si odpověděl Stack overflow nebo úplně jinou chybu/vyjímku vs Stack overflow
12.8.2011 10:02 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Programátorský oříšek
Je to o ničem, ale já jsem chtěl příklad :-)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
15.8.2011 00:07 jekub
Rozbalit Rozbalit vše Re: Programátorský oříšek
class fakt {
public:
	fakt(long n) {
	}
};

long operator-(const fakt &a, long l) {
	throw 1L;
}

long operator*(const fakt &a, long l) {
	throw 1L;
}

long fak(const fakt &a) {
return a * fak(a-1);
}

int main(int argc, char* argv[])
{
	try {
		fak(0L);
	}
	catch (long) {
		42 ;
	}
	return 0;
}
no ten faktorial, ten by z toho sel taky vymacknout.
15.8.2011 08:27 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Programátorský oříšek
Dík, mám malou představivost, takto praktický kód mě nenapadl :-)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
12.8.2011 10:53 kuka
Rozbalit Rozbalit vše Re: Programátorský oříšek
Odpovědět | | Sbalit | Link | Blokovat | Admin
To je tedy opravdu orisek:-) Pro mne minimalne v tom, o jaky ma jit jazyk.
12.8.2011 12:02 kaaja | skóre: 24 | blog: Sem tam něco | Podbořany, Praha
Rozbalit Rozbalit vše Re: Programátorský oříšek
Máš pravdu, v jazyku, který definuji já platí pravidlo, že se * vyhodnocuje zkráceně a když první z činitelů je 0, tak se již druhý nevyhodnocuje. Takže pro kladná vyjde vždy 0.
18.8.2011 14:51 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Programátorský oříšek
Odpovědět | | Sbalit | Link | Blokovat | Admin
kdyz uz se to tady resi tak prihodim jednu implementaci:
#include <iostream>

template<int i>
struct factorial
{
        static int const value = i * factorial<i - 1>::value;
};

template<>
struct factorial<0>
{
        static int const value = 1;
};

int main()
{
        std::cout << factorial<8>::value << "\n";
}
18.8.2011 15:07 Kit
Rozbalit Rozbalit vše Re: Programátorský oříšek
Také mám jednu oblíbenou:
(defun faktorial (n)
  (if (> n 1)
    (* n (faktorial (- n 1)))
    1))
18.8.2011 17:04 Sten
Rozbalit Rozbalit vše Re: Programátorský oříšek
Když už máme to nové C++:
constexpr int factorial(int number)
{
    return number ? number * factorial(number - 1) : 1;
}

int main()
{
    std::cout << factorial(8) << std::endl;
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.