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ą.