rekursiva algoritmer är de algoritmer som kan kalla sig som en del av lösningen . Dessa funktioner fungerar ofta på problem som innehåller en serie av identiska sub- problem , liksom träd traversering eller faktoriell beräkning . Upprepade ringa samma funktion om och om igen kan göra arbetet långsamt , även om det kan göra kodning enklare . För att öka exekveringshastighet , kan du återskapa rekursiva algoritmer , såsom faktoriella algoritmen , i en något mer komplicerad iterativ algoritm med slingor som ska köras mycket snabbare . Instruktioner
1
Analysera rekursiva algoritmen . I det här exemplet ska du använda den rekursiva lösningen för fakulteten problemet :
int faktoriell ( int faktum ) {
om ( faktum == 0 ) {return 1 ; } else {return faktum * faktoriell ( faktum - 1 ) ;} }
2
avgöra om någon funktionsargumenten kan hållas i variabler . I faktoriella exempel kan resultaten av faktoriell lagras i en variabel " total_factorial " för varaktigheten av någon iteration. Detta exempel visar rekursiva faktoriell algoritm och variabeln som ska användas för den rekursiva argumentet :
int total_factorial = 0 : Addera 3
Bestäm en slinga struktur . I C + + , till exempel , fungerar " medan " loop väl med iterationer som har en indeterminant längd . " För " loopar , å andra sidan , fungerar bra när en loop kommer att gå för en strikt tid , representerad av ett heltal av något slag . För faktoriella exempel kommer en "för" loop fungera bra :
int faktoriell = 5 ; int total_factorial = 0;
4
Bestäm stoppa förhållanden. Vanligtvis , såsom i den faktoriella exempel kommer rekursion upphöra om ett villkor är uppfyllt . I en Interative slinga , t.ex. för slingan , hjälper det att veta innan handen . Eftersom du vet att finna fakulteten av ett antal " n" som du kommer att iterera n- 1 gånger ( utöver noll ) , kan du börja på en och kör tills faktoriell nummer :
for (int i = 1 ; i < = faktoriell , i + + ) { if (i == 1 ) { total_factorial = 1 ; } else { total faktoriell * = i ; } } Addera