En sällan använda begrepp i C är funktionen rekursion . En rekursiv funktion är helt enkelt en funktion som anropar sig själv . Recursive funktioner kan vara användbara i vissa funktioner, men kan vanligtvis ersättas med hjälp av en slinga. Syfte med rekursiv funktion
En rekursiv funktion kan användas när en operation måste utföras upprepade gånger på en uppsättning data . Till exempel kan en rekursiv funktion utför upprepade gånger en matematisk operation på ett numeriskt värde tills ett villkor är uppfyllt . Addera Skapa en rekursiv funktion
Någon funktion som kallar sig är en rekursiv funktion . Det finns inga speciella krav på en funktion för att kalla sig , det kan göra så cait skulle kalla någon annan funktion . Som ett exempel , är följande en rekursiv funktion för att beräkna nästa nummer i en Fibonacci sekvens :
långa fib ( long n ) katalog
{
if ( n < = 2 ) katalog
{
avkastning 1;
}
annat
{
retur fib ( n - 1 ) + fib ( n - 2 ) ,
}
}
Problem med rekursion
rekursion har flera möjliga problem som bör beaktas innan du skriver en rekursiv funktion . Rekursiva funktioner kan vara mycket ineffektivt , inte bara är det en bunt overhead från upprepat anropa funktionen , kan rekursiva funktioner lätt sluta med exponentiella gångtider beroende på hur de är skrivna . Rekursiva funktioner löper också en risk för att en stackspill om antalet rekursiva anrop är för hög.
Rekursion Vs. Iteration
Mest rekursiva funktioner kan implementeras som en icke- rekursiv funktion som använder en iterativ slinga. Detta tenderar att vara mer effektiva och säkrare , men i vissa fall kan vara svårare att skriva och läsa .
Rekursiva funktioner används oftast när man navigerar en trädstruktur , eller när du använder iteration skulle göra fungera mycket mer komplex . I de flesta andra fall bör iteration användas istället .