recursieve algoritmen zijn die algoritmen die zichzelf kunnen noemen als onderdeel van hun oplossing . Deze functies werken vaak op problemen die een reeks identieke sub - problemen , zoals boom traversal of faculteit berekening bevatten . Herhaaldelijk bellen dezelfde functie over en kan het werk langzaam te maken, ook al is het misschien te maken codering eenvoudiger . Om uitvoeringssnelheid verhogen kunnen recursieve algoritmen , zoals de faculteit algoritme opnieuw , in een iets ingewikkelder iteratief algoritme lussen die veel sneller wordt uitgevoerd . Instructies 1 Analyseer de recursieve algoritme . In dit voorbeeld , krijgt u de recursieve oplossing voor de faculteit probleem gebruiken : int faculteit ( int feit ) { if ( feit == 0 ) { return 1 ; } else { return feit * faculteit ( feit - 1 ) ; } } kopen van 2 Bepaal of elke functie argumenten kunnen worden gehouden in variabelen . In de faculteit voorbeeld kunnen de resultaten van de faculteit in een variabele " total_factorial " worden opgeslagen voor de duur van elke iteratie . Dit voorbeeld toont de recursieve faculteit algoritme en de variabele te gebruiken voor de recursieve argument : int total_factorial = 0 : 3 Bepaal een lus structuur . In C + + , bijvoorbeeld de lus "terwijl" werkt goed met iteraties een indeterminant lengte hebben . " Voor " lussen , anderzijds , goed werken als een lus gaat een strikte duur vertegenwoordigd door een geheel getal van een soort. Voor de faculteit zal bijvoorbeeld een lus "voor" goed te werken : int factoriële = 5 ; int total_factorial = 0 ; 4 Bepaal stoppen voorwaarden . Meestal , zoals in de faculteit voorbeeld zal de recursie opgeheven wanneer aan een voorwaarde is voldaan . In een iteratieve lus , zoals de lus , het helpt om te weten voor de hand . Omdat je weet dat het vinden van de faculteit van een getal " n" dat je n - 1 keer ( afgezien van nul ) zal herhalen , kunt u beginnen op een en lopen tot de faculteit nummer : for (int i = 1 ; i < = faculteit ; i + + ) { if ( i == 1 ) { total_factorial = 1 ; } else { totaal factoriële * = i ; } }
|