36 Rekurencja

background image

Rekurencja

Wykład:

rekursja, funkcje rekurencyjne, wywołanie

samej siebie, wyznaczanie poszczególnych liczb

Fibonacciego, potęgowanie, algorytm Euklidesa

background image

REKURENCJA

Rekurencja

(z łac.

recurrere

), zwana także

rekursją

(z ang.

recursion

) to termin oznaczający w programowaniu sytuację,

kiedy funkcja w celu zwrócenia prawidłowego wyniku

wywołuje samą siebie (a dokładnie tworzy swoje kopie aż do

napotkania tzw. przypadku podstawowego, dla którego

funkcja może wyznaczyć wynik).

background image

FUNKCJA REKURENCYJNA

function

s(n:integer):integer;

s(4)

=4*s(3)

begin

if

(n>1)

then

s:=n*s(n-1);

else

s:=1;

end;

?

background image

FUNKCJA REKURENCYJNA

function

s(n:integer):integer;

s(4)

=4*s(3)

begin

if

(n>1)

then

s:=n*s(n-1);

else

s:=1;

end;

s(3)

=3*s(2)

?

?

background image

FUNKCJA REKURENCYJNA

function

s(n:integer):integer;

s(4)

=4*s(3)

begin

if

(n>1)

then

s:=n*s(n-1);

else

s:=1;

end;

s(3)

=3*s(2)

?

?

s(2)

=2*s(1)

?

background image

FUNKCJA REKURENCYJNA

function

s(n:integer):integer;

s(4)

=4*s(3)

begin

if

(n>1)

then

s:=n*s(n-1);

else

s:=1;

end;

s(3)

=3*s(2)

?

?

s(2)

=2*s(1)

?

s(1)

=1

1

background image

FUNKCJA REKURENCYJNA

function

s(n:integer):integer;

s(4)

=4*s(3)

begin

if

(n>1)

then

s:=n*s(n-1);

else

s:=1;

end;

s(3)

=3*s(2)

?

2

s(2)

=2*s(1)

?

s(1)

=1

1

background image

FUNKCJA REKURENCYJNA

function

s(n:integer):integer;

s(4)

=4*s(3)

begin

if

(n>1)

then

s:=n*s(n-1);

else

s:=1;

end;

s(3)

=3*s(2)

?

2

s(2)

=2*s(1)

6

s(1)

=1

1

background image

FUNKCJA REKURENCYJNA

function

s(n:integer):integer;

s(4)

=4*s(3)

begin

if

(n>1)

then

s:=n*s(n-1);

else

s:=1;

end;

s(3)

=3*s(2)

24

2

s(2)

=2*s(1)

6

s(1)

=1

1

background image

FUNKCJA WYZNACZAJĄCA N-TY

WYRAZ CIĄGU FIBONACCIEGO

function

fib(n:integer):integer;

begin

if

(n=1)

or

(n=2)

then

fib:=1

else

if n>2

then

fib:=fib(n-1)+fib(n-2);

end;

fib(5)

fib(4)

fib(3)

fib(2)

fib(2)

fib(1)

fib(2)

fib(3)

fib(1)

background image

FUNKCJA WYZNACZAJĄCA N-TY

WYRAZ CIĄGU FIBONACCIEGO

function

fib(n:integer):integer;

begin

if

(n=1)

or

(n=2)

then

fib:=1

else

if n>2

then

fib:=fib(n-1)+fib(n-2);

end;

fib(5)

fib(4)

fib(3)

fib(2)

fib(2)

fib(1)

fib(2)

fib(3)

fib(1)

1

1

1

1

1

background image

FUNKCJA WYZNACZAJĄCA N-TY

WYRAZ CIĄGU FIBONACCIEGO

function

fib(n:integer):integer;

begin

if

(n=1)

or

(n=2)

then

fib:=1

else

if n>2

then

fib:=fib(n-1)+fib(n-2);

end;

fib(5)

fib(4)

fib(3)

fib(2)

fib(2)

fib(1)

fib(2)

fib(3)

fib(1)

1

1

1

1

1

2

background image

FUNKCJA WYZNACZAJĄCA N-TY

WYRAZ CIĄGU FIBONACCIEGO

function

fib(n:integer):integer;

begin

if

(n=1)

or

(n=2)

then

fib:=1

else

if n>2

then

fib:=fib(n-1)+fib(n-2);

end;

fib(5)

fib(4)

fib(3)

fib(2)

fib(2)

fib(1)

fib(2)

fib(3)

fib(1)

1

1

1

1

1

2

3

2

background image

FUNKCJA WYZNACZAJĄCA N-TY

WYRAZ CIĄGU FIBONACCIEGO

function

fib(n:integer):integer;

begin

if

(n=1)

or

(n=2)

then

fib:=1

else

if n>2

then

fib:=fib(n-1)+fib(n-2);

end;

fib(5)

fib(4)

fib(3)

fib(2)

fib(2)

fib(1)

fib(2)

fib(3)

fib(1)

1

1

1

1

1

2

3

2

5

background image

POTĘGOWANIE REKURENCYJNE

function

potega(p,w:integer):integer;

begin

if

w=0 then potega:=1

else

potega:=p*potega(p,w-1);

end

;

Obliczmy 2

p – podstawa potęgi

w – wykładnik potęgi

potega(2,3)

=2*potega(2,2)

?

3

background image

POTĘGOWANIE REKURENCYJNE

function

potega(p,w:integer):integer;

begin

if

w=0 then potega:=1

else

potega:=p*potega(p,w-1);

end

;

Obliczmy 2

p – podstawa potęgi

w – wykładnik potęgi

potega(2,3)

=2*potega(2,2)

?

3

potega(2,2)

=2*potega(2,1)

?

background image

POTĘGOWANIE REKURENCYJNE

function

potega(p,w:integer):integer;

begin

if

w=0 then potega:=1

else

potega:=p*potega(p,w-1);

end

;

Obliczmy 2

p – podstawa potęgi

w – wykładnik potęgi

potega(2,3)

=2*potega(2,2)

?

?

3

potega(2,2)

=2*potega(2,1)

potega(2,1)

=2*potega(2,0)

?

background image

POTĘGOWANIE REKURENCYJNE

function

potega(p,w:integer):integer;

begin

if

w=0 then potega:=1

else

potega:=p*potega(p,w-1);

end

;

Obliczmy 2

p – podstawa potęgi

w – wykładnik potęgi

potega(2,3)

=2*potega(2,2)

?

?

1

3

potega(2,2)

=2*potega(2,1)

potega(2,1)

=2*potega(2,0)

?

potega(2,0)

=1

background image

POTĘGOWANIE REKURENCYJNE

function

potega(p,w:integer):integer;

begin

if

w=0 then potega:=1

else

potega:=p*potega(p,w-1);

end

;

Obliczmy 2

p – podstawa potęgi

w – wykładnik potęgi

potega(2,3)

=2*potega(2,2)

?

2

1

3

potega(2,2)

=2*potega(2,1)

potega(2,1)

=2*potega(2,0)

?

potega(2,0)

=1

background image

POTĘGOWANIE REKURENCYJNE

function

potega(p,w:integer):integer;

begin

if

w=0 then potega:=1

else

potega:=p*potega(p,w-1);

end

;

Obliczmy 2

p – podstawa potęgi

w – wykładnik potęgi

potega(2,3)

=2*potega(2,2)

?

2

1

3

potega(2,2)

=2*potega(2,1)

potega(2,1)

=2*potega(2,0)

4

potega(2,0)

=1

background image

POTĘGOWANIE REKURENCYJNE

function

potega(p,w:integer):integer;

begin

if

w=0 then potega:=1

else

potega:=p*potega(p,w-1);

end

;

Obliczmy 2

p – podstawa potęgi

w – wykładnik potęgi

Wynik = 8

potega(2,3)

=2*potega(2,2)

8

2

1

3

potega(2,2)

=2*potega(2,1)

potega(2,1)

=2*potega(2,0)

4

potega(2,0)

=1

background image

ALGORYTM EUKLIDESA

Algorytm Euklidesa – algorytm znajdowania największego

wspólnego dzielnika (NWD) dwóch liczb naturalnych

Algorytm iteracyjnie:

function

nwd(a,b:integer):integer;

begin

while

(a<>b)

do

begin

if

(a>b)

then

a:=a-b

else

b:=b-a;

end

;

nwd:=a;

end

;

background image

ALGORYTM EUKLIDESA

Algorytm rekurencyjnie:

function

NWD(a,b:integer):integer;

begin
if

(b=0)

then

NWD:=a

else

NWD:=NWD(b,a mod b);

End

;

Wyznaczmy NWD 25 i 10

NWD(25,10)

=NWD(10,5)

?

background image

ALGORYTM EUKLIDESA

Algorytm rekurencyjnie:

function

NWD(a,b:integer):integer;

begin
if

(b=0)

then

NWD:=a

else

NWD:=NWD(b,a mod b);

End

;

Wyznaczmy NWD 25 i 10

NWD(25,10)

=NWD(10,5)

?

NWD(10,5)

=NWD(5,0)

?

background image

ALGORYTM EUKLIDESA

Algorytm rekurencyjnie:

function

NWD(a,b:integer):integer;

begin
if

(b=0)

then

NWD:=a

else

NWD:=NWD(b,a mod b);

End

;

Wyznaczmy NWD 25 i 10

NWD(25,10)

=NWD(10,5)

?

NWD(10,5)

=NWD(5,0)

?

NWD(5,0)

=5

5

background image

ALGORYTM EUKLIDESA

Algorytm rekurencyjnie:

function

NWD(a,b:integer):integer;

begin
if

(b=0)

then

NWD:=a

else

NWD:=NWD(b,a mod b);

End

;

Wyznaczmy NWD 25 i 10

NWD(25,10)

=NWD(10,5)

?

NWD(10,5)

=NWD(5,0)

5

NWD(5,0)

=5

5

background image

ALGORYTM EUKLIDESA

Algorytm rekurencyjnie:

function

NWD(a,b:integer):integer;

begin
if

(b=0)

then

NWD:=a

else

NWD:=NWD(b,a mod b);

End

;

Wyznaczmy NWD 25 i 10

NWD = 5

NWD(25,10)

=NWD(10,5)

5

NWD(10,5)

=NWD(5,0)

5

NWD(5,0)

=5

5


Wyszukiwarka

Podobne podstrony:
36 Organizacje miedzynarodowe OBWE OPA UA
31 36
36 10
36
36 Olimpiada Wiedzy Techniczn Zestaw Testow id 36149 (2)
Parowóz Pm 36
Metody układania algorytmów rekurencja, metoda dziel i zwyciężaj, programowanie dynamiczne, metoda
mata2 rekurencja slajdy
36
36 Lotne węglowodor
36 15 id 36115 Nieznany (2)
36
36. Procesy automatyczne i kontrolowane i ich rola w sterowaniu zachowaniem.
36 Niemcy za rządów dynastii salickiej
Definicja Rekurencji i Iteracji
1 36 201 1240
36
2010 02 05 09;33;36

więcej podobnych podstron