Nieskończona rekurencja - Pascal

0

Witam, jestem uczniem 2 klasy o profilu informatycznym, programowania uczę się rok. (na wstęp, żeby nie było zbyt ogromnych nadziei odnośnie moich umiejętności)
Odnośnie tematu: czy jest możliwe stworzenie nieskończonej rekurencji dla sekwencji Fibonacciego i silni?
Czytałem że Haskell posiada 'umiejętność' nieskończonej rekurencji - pytanie więc czy w pascalu także jest takowa opcja zwalniania pamięci? Lub inny sposób aby rekurencja działała n razy.
Nie chcę robić tego pętlą, ponieważ piszę projekt zawierający wszystkie kody z całego roku.
Bardzo proszę o pomoc, mam 3 dni na oddanie projektu :)

P.S. Tak, szukałem rozwiązania, jednak bezskutecznie.

0

No cóż, dziękuję za odpowiedź, ograniczę ją do kilku wywołań. :)

1

ciąg Fibonacchiego szybciej się liczy bez rekurencji. Ogromnie szybciej.
Tak, może być wtedy w nieskończoność. Ale wynik dość szybko przekroczy ci rozmiar zmiennej, niezależnie od tego jakiego typu użyjesz.

0
Andedde napisał(a):

Nie chcę robić tego pętlą, ponieważ...

Ale mimo to, dziękuje za zainteresowanie tematem, a także za porady =)

0

Nie chcę robić tego pętlą, ponieważ piszę projekt zawierający wszystkie kody z całego roku.

Jestem ciekaw jaka zasada dobrego programowania mówi że im program bardziej skomplikowany tym więcej powinien używać rekurencji a mniej interacyjności...
Zapewne chodzi tutaj o to że nie znasz jakichś podstaw języka i nie rozumiesz jak poprawnie zaimplementować... Więc może rozwiń swoje obawy...

Czytałem że Haskell posiada 'umiejętność' nieskończonej rekurencji - pytanie więc czy w pascalu także jest takowa opcja zwalniania pamięci?

Jakie zwalnianie pamięci... Czy ty człowieku w ogóle rozumiesz czym się tutaj różni Pascal od np. Haskella? Bo mi się wydaje że nie, więc proszę ciebie, nie mów głupot jeżeli nie wiesz.
I nie, Pascal sam w sobie tego nie gwarantuje, ale FPC ma kod do optymalizacji ogonowej rekurencji, który... nie działa z tego co się orientuję bo jest niedokończony.

Lub inny sposób aby rekurencja działała n razy.

Pascal wspiera wywołanie rekurencyjne procedur dopóki starczy pamięci.

Witam, jestem uczniem 2 klasy o profilu informatycznym, programowania uczę się rok. (na wstęp, żeby nie było zbyt ogromnych nadziei odnośnie moich umiejętności)

Czy do kogokolwiek dociera, że jeżeli ma pytanie o podstawy, to pisze w dziale newbie? Zapewne nie. Każdy dział powinien mieć subdział "o podstawy" który przekieruje 'geniuszy' do działu Newbie, bo po prostu inaczej nie dotrze...

0

Rekurencja ogonowa jest to przykład wspaniałej optymalizacji, dającej niesamowite wyniki... na której absolutnie nie można polegać, co czyni ją bezużyteczną.

Bo co z tego, że kompilator zoptymalizuje rekurencję ogonową przy spełnieniu określonych warunków — kiedy tych warunków jest 50, nie do zapamiętania, nie wszystkie są udokumentowane i zmieniające się z wersji na wersję.

Zmienimy jedną linijkę w kodzie, kompilatorowi coś się nie spodoba i nagle, po cichu, optymalizacja znika, a program działa 10 razy wolniej.

Chcesz rekurencję ogonową — zaimplementuj ją sam:

repeat
   jedziemy;
   jedziemy;
   zmiana parametrów;
until (warunek_końca);
0

Bo co z tego, że kompilator zoptymalizuje rekurencję ogonową przy spełnieniu określonych warunków — kiedy tych warunków jest 50, nie do zapamiętania, nie wszystkie są udokumentowane i zmieniające się z wersji na wersję.

Trochę przesadzasz, jeżeli kod jest dobrze napisany to można się pobawić. Natomiast faktem jest że nie można sobie pozwolić na sztuczki-magiczki w okolicach takiego kodu.

Chcesz rekurencję ogonową — zaimplementuj ją sam:

Generalnie to kompilator jeżeli optymalizuje to robi to lepiej niż człowiek a to będzie przeszkadzanie jeżeli kompilator wspiera taką optymalizację i te warunki które spełnisz przełożą się na lepszy kod... Ale z drugiej strony to nie byłem w stanie zmusić FPC do takiej optymalizacji więc zapewne w tym przypadku ręczna optymalizacja będzie lepsza.
Pascal nie zalicza się do grupy języków które łatwo optymalizować bo jest po prostu dużo możliwości, w tym assembler i inne sztuczki-magiczki. Typowe zastosowanie optymalizacji ogonowej to języki funkcyjne. Więc zgadzam się z wnioskiem, nie do końca z argumentami.

1 użytkowników online, w tym zalogowanych: 0, gości: 1