Derekursywacja: Różnice pomiędzy wersjami
[wersja przejrzana] | [wersja nieprzejrzana] |
Usunięta treść Dodana treść
Wycofano ostatnią zmianę (zrobioną przez 83.23.203.200) i przywrócono wersję 22717903 autorstwa Lampak; Usuwanie istotnych informacji. |
złożoność |
||
Linia 1:
'''Derekursywacja''' - przemiana algorytmów [[rekursja|rekurencyjnych (rekursyjnych)]] na [[iteracja|iteracyjne]]. Stosuje się ją w celu zwiększenia szybkości działania
== Przykład ==
Linia 6:
unsigned long fibonacci( unsigned long n ){
if( n <= 1 ) return n;
return
}
</source>
Okazuje się, że jest to algorytm bardzo niewydajny, o złożoności czasowej <math>O(2^n)</math> i pamięciowej <math>O(2^n)</math>. Po derekursywacji, otrzymujemy algorytm iteracyjny, który działa zdecydowanie szybciej (złożoność czasowa <math>O(n)</math>, pamięciowa <math>O(n)</math>):
<source lang="cpp">
if( n == 0 ) return 0;
▲ for( TypZmiennej i = 0 ; i < ( n - 1 ) ; ++i ) {
b = b + a;
a = b - a; // = poprzednia wartość 'b' - nie trzeba pamiętać w osobnej zmiennej
|