Zatim jsem neprisel na to jak z toho ven, ale od urciteho cisla vyse pocita faktorial chybne.
4 factorial cr . cr
12
ok
coz neni zrovna spravne cislo.
Pri kompilaci faktorialu poprve mi "rve" v okamziku rekurzivniho volani factorial, ze toto slovo nezna. To jsem vyresil nadefinovanim prazdneho slova faktorial a opetovnym prekladem...
Pokud factorial prelozim vicekrat, udela chybu pozdeji. Po dvojim (vlastne uz trojim) prelozeni dela chybu az u 6ky. Takhle ta rekurze fungovat nebude. Jak to resit korektne?
Pouzivam Gforth.
U nekterych dialektu Forthu (odpovidajicch napriklad ANS norme) se musi uvnitr slova, ktere se ma rekurzivne opakovat, misto jmena tohoto slova pouzit slovo "recursion". Je to tedy neco, jako nahrada za forward deklaraci u Pascalu.
Standardne treba na rekurziu pouzit slovo RECURSE. Ale su vynimky: Napriklad pri pouziti kompilatoru 4tH funguje definicia faktorialu presne tak ako ju popisuje pan Tisnovsky.
Tu je priklad ako to funguje standardne:
( Rekurzia vo FORTHe )
: fac
dup 0=
if
drop 1
else
\ dup 1- fac * \ toto funguje s kompilatorom 4tH
dup 1- recurse * \ standardny pristup: RECURSE
then
;
11 0 do
i . ." ! = " i fac . cr
loop