16
Računalo u školi XVIII. Šibenik - Solaris, 2014. Zoran Vlašić Rekurzija i lambda funkcija

Rekurzija i lambda funkcija (Python)

Embed Size (px)

Citation preview

Page 1: Rekurzija i lambda funkcija (Python)

Računalo u školi XVIII.Šibenik - Solaris, 2014.

Zoran Vlašić

Rekurzija i

lambda funkcija

Page 2: Rekurzija i lambda funkcija (Python)

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

Page 3: Rekurzija i lambda funkcija (Python)

Lambda funkcija

CuF = lambda c : c * 9 / 5 + 32 # Celzijevi u Fahrenheitove st.

FuC = lambda f : (f - 32) * 5 / 9 # Fahrenheitovi u Celzijeve st.

Page 4: Rekurzija i lambda funkcija (Python)

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)

Page 5: Rekurzija i lambda funkcija (Python)

n! – programski jezik Pascal

FUNCTION fakt(n : integer) : integer;

BEGIN

IF (n < 1) THEN fakt := 1

ELSE fakt := n * fakt(n – 1)

END;

Page 6: Rekurzija i lambda funkcija (Python)

n! – programski jezik QBASIC

FUNCTION fakt (n AS INTEGER)

IF n < 1 THEN fakt = 1 ELSE fakt = n * fakt(n - 1)

END FUNCTION

Page 7: Rekurzija i lambda funkcija (Python)

n! – programski jezik Cint fakt(int n)

{if (n < 1)

{return 1;

}else

{return n * fakt(n - 1);

}}

Page 8: Rekurzija i lambda funkcija (Python)

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)

Page 9: Rekurzija i lambda funkcija (Python)

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)

Page 10: Rekurzija i lambda funkcija (Python)

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.

Page 11: Rekurzija i lambda funkcija (Python)

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

Page 12: Rekurzija i lambda funkcija (Python)

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

Page 13: Rekurzija i lambda funkcija (Python)

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)

Page 14: Rekurzija i lambda funkcija (Python)

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.

Page 15: Rekurzija i lambda funkcija (Python)

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)

Page 16: Rekurzija i lambda funkcija (Python)

Hvala na pažnji!