Procedura Rekurencji

0

Cześć i czołem :)
Przede mną kolejne zadanie do wykonania w celach naukowych. Dopiero się uczę więc proszę o wskazówki :)
Muszę napisać procedurę (co ważne) na obliczanie silni z liczby podanej przez użytkownika.
Na formatce stworzyłem pole do wprowadzania liczby, przycisk liczący oraz pole wyświetlające wynik.
Powstał mi taki kod:

procedure TForm1.Silnia_rek;

   begin
     n := StrToInt64(Edit_liczba.text);
     while (n > 1)  do
       begin
         silnia := n * silnia;
         n := n  -1;
     if (n = 1 ) then
       begin
          wynik := 1;
          Edit_wynikRek.text := IntToStr(wynik);
       end;
     end;
       wynik := silnia;
       Edit_wynikRek.text := IntToStr(wynik);
   end;            

Wynik zawsze pojawia się 0. Szczerze to chyba mózg mi się zaciął siedzę patrzę i nie mogę zrozumieć co robię źle ;/ Będę wdzięczny za pomoc!

4

Po pierwsze odseparuj wprowadzanie danych od liczenia silni. Zadeklaruj funkcję i to jej wynik przypisuj do odpowiedniego TextBoxa.
I co tu ma wspólnego z rekurencją? Bez funkcji nie może być wywołania rekurencyjnego (o ile Lazarus/FP nie jest dziwniejszy pod tym względem, bo nie znam).

0

@Saalin: Dziękuje mądra uwaga :)

1
Saalin napisał(a):

Bez funkcji nie może być wywołania rekurencyjnego […]

Rekurancja to wywołanie danego podprogramu w jego własnym ciele, więc to prawda. Z drugiej strony, rekurencję można oprzeć na procedurze, czyli stworzyć procedurę rekurencyjną, która funkcją nie jest — i tu mamy nieprawdę. Ale że procedura to nic innego jak funkcja void, to jedynie pascalowa nomenklatura nie pasuje do cytowanego zdania, pomimo tego, że jest ono prawdziwe. ;)

Rekurencyjne mogą być też metody klas (te zwracające wartość lub tego nie robiące, czyli metody funkcyjne i proceduralne), zdarzenia też takie mogą być. Jednak zdarzenia nie służą do przeprowadzania obliczeń i ogólnie umieszczania logiki, więc takie kombinacje są raczej niemile widziane. Co nie zmienia faktu, że mogą działać rekurencyjnie.

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