I datorprogrammering , inträffar rekursion när en funktion eller procedur - med andra ord , en sekvens av instruktioner för att utföra en viss funktion - kallar sig , antingen direkt eller indirekt ? . Den funktion eller procedur ändrar värdet på parametern ( er ) som skickas till den första gången det kallas och kallar sig med det nya värdet ( s ) . Faktorförsök
Det klassiska exemplet på rekursion innebär computing faktorförsök . En fakultet är produkten av ett givet positivt heltal multiplicerat med all lägre heltal . Fakulteten av 5 är 5 * 4 * 3 * 2 * 1 , är fakulteten för 4 4 * 3 * 2 * 1 och så vidare. Fakulteten av valfritt antal är lika med det numret multiplicerat med fakulteten av antalet omedelbart under den. Med andra ord är faktoriell ( 5 ) samma som 5 * faktoriell ( 4 ) , faktoriell ( 4 ) är samma som 4 * faktoriell ( 3 ) och så vidare , så en enkel faktoriell funktion skulle kunna skrivas som:
int fakultet ( int n ) {return n * faktoriell ( n - 1 ) ;}
Base Case
problemet med denna enkla funktion , dock är att den inte har någon bas fallet , eller tillstånd att berätta det när du ska sluta . Som det ser ut , skulle funktionen fortsätter att kalla sig när n nått noll och därefter in negativa tal , återvänder meningslösa faktorförsök . I verkligheten behöver en faktoriell funktion att sluta när n = 1 , så en riktig faktoriell funktion kan skrivas som :
int faktoriell ( int n ) {if ( n == 1 ) {return 1 ; } else {return n * faktoriell ( n - 1 ) ;} }
på engelska , undersöker funktionen numret skickas till den som en parameter och , om antalet är 1 returnerar 1 . Annars returnerar funktionen multipliceras talet med fakulteten av antalet minus ett .
Program Stack
Alla rekursiva program måste ha en nedre punkt , eller bas fall , där verksamheten är så trivialt att ett svar kan returneras direkt . Rekursion fungerar genom att lägga till , eller skjuta , och att ta bort , eller popping , individuella bildrutor till och från en datastruktur som kallas ett program stack . Det finns bara en begränsad mängd utrymme på programmets stack , så , utan en bas fall skulle en rekursiv program fortsätter helt enkelt köra tills stapeln spill .
& Nackdelar
rekursion är svårt att förstå eftersom det inte är intuitivt och kan vid en första anblick , att involvera cirkulär eller falsk logik . Enligt IBM är rekursion sällan används av programmerare i imperativ programmering språk - som inte anger en explicit sekvens av steg för att utföra - eftersom de tror att det är långsamt och avfall utrymme . Men , om det genomförs på rätt sätt , är rekursion en kraftfull programmeringsteknik som kan effektivisera vissa programmeringsuppgifter .