Technologia Informacyjna Temat 7: Rekurencja

Rekurencja

Rekurencja polega na odwołaniu się do samego siebie, czyli (w przypadku programowania) wywołaniu funkcji lub procedury w swoim własnym wnętrzu.

Rekurencja

Zastosowanie rekurencji pozwala w prosty i przejrzysty sposób przedstawić algorytm, ale przeważnie wiąże się ze zwiększonym zapotrzebowaniem na pamięć i wolniejszym wykonaniem.

Rekurencja

Przykład rekurencji:

Function Silnia(n)

If n > 1 Then

Silnia = n * Silnia(n-1)

Else

Silnia = 1

End If

End Function

Rekurencja

Przykład ten co poprzednio, ale napisany metodą tradycyjną:

Function Silnia(n)

Dim Wynik

Wynik = 1

For i=1 To n

Wynik = Wynik * i

Next i

Silnia = Wynik

End Function

Rekurencja

Obliczmy złożoność obu algorytmów zarówno w aspekcie czasowym jak i pamięciowym.

Rekurencja

Algorytm rekurencyjny:

Function Silnia(n)

If n > 1 Then

Silnia = n * Silnia(n-1)

Else

Silnia = 1

End If

End Function

Rekurencja

Przy każdym wywołaniu

Algorytm rekurencyjny:

funkcji potrzeba jednej

komórki pamięci dla n

Function Silnia(n)

i jednej dla wyniku –

razem dwie komórki.

If n > 1 Then

Silnia = n * Silnia(n-1)

Else

Silnia = 1

End If

End Function

Rekurencja

Przy każdym wywołaniu

Algorytm rekurencyjny:

funkcji potrzeba jednej

komórki pamięci dla n

Function Silnia(n)

i jednej dla wyniku –

razem dwie komórki.

If n > 1 Then

Silnia = n * Silnia(n-1)

Else

Przy każdym wywołaniu

Silnia = 1

funkcji dokonywane jest

End If

jedno porównanie, jedno

mnożenie, jedno

End Function

odejmowanie, jedno

przypisanie – razem

cztery operacje.

Rekurencja

Jako że złożoność algorytmu jest zależna od rozmiaru wartości wejściowej n, więc złożoność trzeba wyrazić w funkcji właśnie tej wartości:

Złożoność pamięciowa:

Złożoność czasowa:

Rekurencja

Jako że złożoność algorytmu jest zależna od rozmiaru wartości wejściowej n, więc złożoność trzeba wyrazić w funkcji właśnie tej wartości:

Złożoność pamięciowa:

2*n

Złożoność czasowa:

4*(n-1)+2

Rekurencja

Algorytm z pętlą For:

Przy każdym wywołaniu

funkcji potrzeba jednej

komórki pamięci dla n,

Function Silnia(n)

jednej dla zmiennej

indeksowej, jednej dla

Dim Wynik

wyniku pośredniego

Wynik = 1

i jednej dla wyniku

For i=1 To n

końcowego – razem

cztery komórki.

Wynik = Wynik * i

Next i

Silnia = Wynik

End Function

Rekurencja

Algorytm z pętlą For:

Przy każdym wywołaniu

funkcji potrzeba jednej

komórki pamięci dla n,

Function Silnia(n)

jednej dla zmiennej

indeksowej, jednej dla

Dim Wynik

wyniku pośredniego

Wynik = 1

i jednej dla wyniku

For i=1 To n

końcowego – razem

cztery komórki.

Wynik = Wynik * i

Next i

W każdym przebiegu pętli

Silnia = Wynik

mamy: przypisanie,

mnożenie i inkrementację,

End Function

oraz trzy przypisania poza

pętlą

Rekurencja

Jako że złożoność algorytmu jest zależna od rozmiaru wartości wejściowej n, więc złożoność trzeba wyrazić w funkcji właśnie tej wartości:

Złożoność pamięciowa:

Złożoność czasowa:

Rekurencja

Jako że złożoność algorytmu jest zależna od rozmiaru wartości wejściowej n, więc złożoność trzeba wyrazić w funkcji właśnie tej wartości:

Złożoność pamięciowa:

4

Złożoność czasowa:

3*n+3

Document Outline

  • Slajd 1
  • Slajd 2
  • Slajd 3
  • Slajd 4
  • Slajd 5
  • Slajd 6
  • Slajd 7
  • Slajd 8
  • Slajd 9
  • Slajd 10
  • Slajd 11
  • Slajd 12
  • Slajd 13
  • Slajd 14
  • Slajd 15