AutoIt/Ćwiczenia dla zaawansowanych

Funkcje rekurencyjne edytuj

1. Napisać funkcję rekurencyjną sumująca liczby całkowite w przedziale od m do n (m i n podawane jako parametry).

Funkcja powinna działać prawidłowo także dla liczb ujemnych, oraz niezależnie od kolejności podanych parametrów.

Jeżeli podamy jeden parametr to sumowanie powinno być od zera lub do zera (dla liczb ujemnych).

Przykładowe rozwiązanie:

Func suma($n, $m=0.0)              ;drugi parametr opcjonalny, z domyślną wartością 0.0
   If $n<$m Then                   ;kalibrowanie danych, aby można było wpisywać liczby w dowolnej kolejności
      $pom=$n
      $n=$p
      $m=$pom
   EndIf
   if $n=$m Then Return $m         ;przypadek bazowy dla najmniejszej liczby
   Return $n+suma($n-1,$m)         ;obliczenia rekurencyjne
EndFunc

Ilość sumowanych liczb jest ograniczona do ok.4000, przy większej ilości ze względu na możliwość przepełnienia stosu działanie funkcji zostanie przerwane.


2. Napisać rekurencyjną funkcję obliczającą liczbę e. Funkcja ta powinna korzystać z rekurencyjnej funkcji silna zdefiniowanej w powyższym przykładzie.

Skorzystać z rozwinięcia w szereg e = 1 + 1/1! + 1/2! + ... + 1/n! + ... (graniczna wartość n podawana jako parametr).

(dla sprawdzenia przybliżona wartość e = 2.718281828459...)

Przykładowe rozwiązanie:

Func e($n)
   if $n=0 Then Return 1.0          ;przypadek bazowy dla n=0
   Return 1/silnia($n)+e($n-1)      ;wywołanie rekurencyjne i wywołanie innej funkcji rekurencyjnej
EndFunc

Func silnia($n)
   if $n=0 Then Return 1.0  
   Return $n*silnia($n-1)
EndFunc

Jak widać w powyższym przykładzie funkcja rekurencyjna może w swojej definicji wywoływać inną funkcję rekurencyjną.