Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Functii recursive

c



+ Font mai mare | - Font mai mic



Functii recursive

Functiile C pot fi recursive, adica se pot autoapela direct sau indirect. O functie este recursiva daca o instructiune din corpul functiei este o instructiune de apel al aceleiasi functii. Uneori o functie recursiva se numeste si functie circulara. Un exemplu de o astfel de functie este functia factorial() care determina factorialul unui numar. Aceasta functie se poate organiza recursiv, stiind ca: n! = n(n-1)!. Avand in vedere 0!=1, aceasta functie se poate organiza astfel:



long factorial (int n)

Programul de apel al acestei functii se scrie sub forma:

# include <stdio.h>

void main (void)

long factorial (int n)

Observatie: Atunci cand o functie se autoapeleaza recursiv, la fiecare apel al functiei se memoreaza pe stiva atat valorile parametrilor actuali, cat si intregul set de variabile dinamice definite in cadrul functiei. Din aceasta cauza stiva trebuie dimensionata corespunzator.

O varianta echivalenta a functiei factorial() definita mai sus ar fi urmatoarea:



long factorial(int n)

Un alt exemplu interesant este dat de sirul lui Fibonacci, in care termenul general an este dat de relatia de recurenta: an = an-1+ an-2 , unde a0 = 0 si a1=1. Codul functiei poate fi scris sub forma:

long fib(int n)

Utilizarea recursivitatii poate sa nu conduca la o reducere a memoriei necesare, atat timp cat stiva este folosita intens pentru fiecare apel recursiv. De asemenea si executia programului poate sa nu fie mai rapida. Dar codul recursiv este mai compact si de multe ori mai usor de scris si inteles decat echivalentul sau recursiv. Recursivitatea este convenabila in mod deosebit pentru operatii pe structuri de date definite recursiv, cum sunt listele, arborii etc.





Politica de confidentialitate | Termeni si conditii de utilizare



});

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 774
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved