Pytanie podobne do tego zostało zadane kilka lat temu , ale to jest jeszcze trudniejsze.
Wyzwanie jest proste. Napisz program (w wybranym języku), który wielokrotnie wykonuje kod bez użycia jakichkolwiek struktur powtarzania takich jak while
, for
, do while
, foreach
lub goto
( Więc dla was wszystkich nitpickers, nie można użyć pętli ). Jednak rekursja jest niedozwolona, w funkcji wywołującej sens (patrz definicja poniżej) . To uczyniłoby to wyzwanie zdecydowanie zbyt łatwym.
Nie ma ograniczeń co do tego, co należy wykonać w pętli, ale opublikuj wyjaśnienie z odpowiedzią , aby inni mogli dokładnie zrozumieć, co jest wdrażane.
Dla tych, którzy mogą się rozłączyć z definicjami, definicja pętli dla tego pytania jest następująca:
A programming language statement which allows code to be repeatedly executed.
A definicja rekurencji dla tego pytania będzie twoją standardową definicją funkcji rekurencyjnej:
A function that calls itself.
Zwycięzcą zostanie odpowiedź, która uzyska najwięcej głosów poparcia 16 lipca o godzinie 10 czasu wschodniego. Powodzenia!
AKTUALIZACJA:
Aby uspokoić wciąż wyrażane zamieszanie, może to pomóc:
Zasady jak podano powyżej:
- Nie używaj pętli ani goto
- Funkcje nie mogą się nazywać
- Rób co chcesz w „pętli”
Jeśli chcesz coś zaimplementować, a reguły wyraźnie tego nie zabraniają, śmiało i zrób to. Wiele odpowiedzi już zagięło zasady.
rep(f){f();f();}
- jest to instrukcja (deklaracja funkcji jest instrukcją w niektórych językach), która pozwala na wielokrotne wykonywanie kodu. Czy to niedozwolone? Pytasz o kod do implementacji pętli. Jeśli ten kod jest składniowo instrukcją, właśnie go zabroniłeś. Inny przykład: f(b) { b(); g(b); }; g(b) { f(b); }
. Powiedziałbym, że f
jest funkcją rekurencyjną (poprzez wzajemną rekurencję g
). Czy to niedozwolone?
function A
połączeniafunction B
ifunction B
wywołania,function A
podczas gdy jedna z funkcji coś wykona. Ponieważ funkcja nie nazywa się sama, powinna być poprawna na podstawie kryteriów ^. ^