rekurzija i lambda funkcija (python)
TRANSCRIPT
Računalo u školi XVIII.Šibenik - Solaris, 2014.
Zoran Vlašić
Rekurzija i
lambda funkcija
Rekurzivne funkcije
Funkciju koja poziva samu sebe nazivamo rekurzivnom.
U svakoj rekurziji treba biti završetak koji uglavnom nije rekurzivan.
0! = 1
n! = n * (n - 1)!
x0 = 1
xn = x * xn - 1
Lambda funkcija
CuF = lambda c : c * 9 / 5 + 32 # Celzijevi u Fahrenheitove st.
FuC = lambda f : (f - 32) * 5 / 9 # Fahrenheitovi u Celzijeve st.
Faktorijeli n! = 1 * 2 * 3 *... * n
0! = 1
n! = n * (n – 1 )!
fakt(n):
ako je n < 1 tada je fakt = 1
inače fakt = n * fakt(n – 1)
n! – programski jezik Pascal
FUNCTION fakt(n : integer) : integer;
BEGIN
IF (n < 1) THEN fakt := 1
ELSE fakt := n * fakt(n – 1)
END;
n! – programski jezik QBASIC
FUNCTION fakt (n AS INTEGER)
IF n < 1 THEN fakt = 1 ELSE fakt = n * fakt(n - 1)
END FUNCTION
n! – programski jezik Cint fakt(int n)
{if (n < 1)
{return 1;
}else
{return n * fakt(n - 1);
}}
n! – programski jezik Haskell
fakt n | n < 1 = 1
fakt n = n * fakt (n – 1)
fakt n = if n < 1 then 1 else n * fakt (n – 1)
n! – programski jezik Python
def fakt(n):
if n < 1:
return 1
else:
return n * fakt(n - 1)
Fakt = lambda n: 1 if n < 1 else n * Fakt(n - 1)
Zbroj recipročnih vrijednosti prvih n prirodnih brojeva
Zbroj recipročnih vrijednost prvih n prirodnih brojeva je zbroj do (n - 1) uvećan za 1 / n:
zbroj = 1 + 1/2 + 1/3 +...+ 1/(n - 1) + 1/n =
= (1 + 1/2 + 1/3 +...+ 1/(n - 1) ) + 1/n.
Ulazni podatak je prirodni broj n.
Izlazni podatak je zbroj recipročnih vrijednosti prirodnih brojeva do n.
Zbroj recipročnih vrijednosti prvih n prirodnih brojeva
zbroji(n):
ako je n < 1 : vrati 0 ; kraj rekurzije
inače vrati zbroj (n - 1) i dodaj recipročnu vrijednost 1 / n
Zbroj = lambda n : 0.0 if n < 1 else Zbroj (n - 1) + 1.0 / n
Fibonaccijev niz
Fibonaccijev niz je niz brojeva kod kojeg se novi član dobije zbrajanjem dvaju prethodnih:
x1 = 1; x2 = 1; xn = xn-1 + xn-2; n= 3, 4,...
(povezan je sa zlatnim rezom).
Fibonaccijev niz
fib(n):
ako je n <= 2 : vrati 1 ; kraj rekurzije
inače vrati fib(n - 1) + fib(n - 2)
Fib = lambda n : 1 if n <= 2 else Fib(n – 1) + Fib(n – 2)
Najveća zajednička mjera
Najveća zajednička mjera dvaju prirodnih brojeva je broj s kojim su obadva broja djeljiva.
Euklidov algoritam glasi: veći broj valja podijeliti manjim, zatim manji ostatkom dijeljenja, potom taj ostatak novim ostatkom i postupak se nastavlja dok se ne dobije ostatak 0, a posljednji ostatak različit od 0 je najveća zajednička mjera.
Ulazni podatci su prirodni brojevi m i n.
Izlazni podatak je najveća zajednička mjera.
Najveća zajednička mjera
mjera(m, n):
ako je n == 0 : mjera je m, ; kraj rekurzije (dok n nije 0)
inače mjera je mjera(n, m % n)
Mjera = lambda m, n : m if n == 0 else Mjera(n, m % n)
Hvala na pažnji!