Funcții în c pentru începători

suma int (int n) // Ca parametru, numărul de la locul apelului la variabila n

dacă (n == 1) retur 1; // Dacă noua valoare este 1, o vom adăuga cu 1, nu cu cea precedentă. deoarece cel precedent este zero. iar adăugarea lui 1 + 0 este infinită.

altceva sumă de returnare (n - 1) + n; // dar dacă n> 1, atunci adăugați-l cu valoarea precedentă egală cu suma tuturor elementelor până la n

sistem ("cls"); // ștergeți ecranul

cout <

Luați în considerare acest program în detaliu. Acesta este un punct important.
Mai întâi, funcția principală este scrisă: int main (). Acesta este un program gol scris în C ++. După scrierea unui program gol, începe să scrie o funcție recursivă. În exemplul de mai sus, am numit noua funcție int sum (int n)
Funcția noastră este de a calcula suma elementelor. Pentru simplitate, luăm întregi. Funcția va presupune ceva, în cazul nostru funcția va efectua adăugarea de numere. Rezultatul adăugării va funcționa ca rezultat al eforturilor dvs. Acest rezultat poate fi obținut în orice moment din afara funcției. Deoarece numărul întreg selectat, rezultatul este suma numerelor întregi - este un număr întreg, astfel încât rezultatul returnat este utilizat un tip de funcții de vorbire, aceasta va returna int.

Funcțiile recursive nu știu când să se oprească să se numească, deci în interiorul lor este necesar să scrie o condiție pentru oprire. În exemplul dat, o astfel de condiție este sosirea unei unități în parametrul n. Dacă n ia o unitate, atunci se întoarce una, în caz contrar funcția se solicită ea însăși. Acest moment este important pentru a prinde, acest moment se numește recursiune. Pentru ca o funcție să citească corect ceva, mai întâi trebuie să returnați valorile corecte. Ei bine, atunci când valoarea este un fel de definit, dar uneori trebuie să vă strângeți puțin și să numărați această valoare cu codul, numai după ce se face calculul. Iată calculul codului aici și se întâmplă.
Suma funcției ia orice număr. Să avem un număr mai mare decât unul (aceasta este pentru o explicație), funcția vede că n nu a venit una și face o copie a ei înșiși. Se creează o altă funcție, care este copiată pur și simplu de cea actuală, și se realizează de la sine. Și astfel este creată o copie a fiecărei funcții. Cinci apeluri - cinci copii ale funcțiilor vor fi create în memorie la un moment dat.

Acum vedeți ce se întâmplă:
În interiorul funcției este dată numărul 5. Funcția este apelată și a început să funcționeze. n a luat 5, verifică că în n, unde se dovedește că nu există unul în n, deci un număr este returnat. Dacă vă amintiți, au fost alese numere întregi și rezultatul poate fi preluat în orice moment dorit din afara funcției. Rezultatul este preluat din funcția megasse, de fapt dintr-o funcție nouă, care va fi o copie a acesteia. Această funcție care nu copiază, își face încă treaba, se așteaptă la valoarea pe care va trebui să o ofere. Puteți presupune că aceasta nu este o copie a modului de așteptare. Copia începe. Vedeți ce vine în această copie, vine vorba de ea (n-1). După cum este vorba de 5-1, adică, 4. Prima funcție este în așteptare pentru valoarea sa, o copie a primei funcții durează modul de așteptare să aștepte pentru valoarea de pornire, care trebuie să fie returnat o copie a acestei copii. Și astfel se repetă până când, până când nu este 2-1, de ce n va veni la 1. De îndată ce n 1 va veni, randamentul de lucru ultimul creat la acel moment, în timp de exemplare. În programul actual, a subliniat că, dacă n-1 ajunge, se întoarce 1. De data aceasta de încetare recursivitatii este începutul calculului. Aici se produce o astfel de întoarcere.

1) n == 1. Ultima copie creată își încheie activitatea. Oferă 1.
2) Înainte de aceasta, copia agățată este ultima. (În fiecare copie creată n este decrementat de una, așa că acum încep să se adauge, a fost de 1, a fost 2. curent copie n == 2). Ultima copie revine acum (1) +2, unde (1) este unitatea care este luată ca rezultat al copiei complete. În formulele poate fi extins la aproximativ ca: ((sum (n-1) + n) ==> (1 + n) ==> (1 + 2) ==> 3)
3) Procesul se repetă. n == 3. ((suma (n-1) + n) ==> (3 + n) ==> (3 + 3) ==> 6)
4) Procesul se repetă. n == 4. ((suma (n-1) + n) ==> (6 + n) ==> (6 + 4) ==>
5) Procesul se repetă. n == 5. ((suma (n-1) + n) ==> (10 + n) ==> (10 + 5) ==> 15)

  • Utilizarea recursiunii începe de la sfârșit, cu ultima copie a funcției create de compilator

În rezumat, ne amintim cum a fost scris programul.
1) Se scrie blocul gol al programului principal.
2) Scrieți o funcție recursivă.
3) Apelați funcția recursivă din blocul principal de programe.

O funcție recursivă în sine primește o instrucțiune de execuție, ceea ce determină compilatorul să creeze o copie a acestei funcții și să execute această copie. Totul este amintit în memorie, iar bucuria principală a procesului de lucru începe cu executarea celei mai recente copii create a funcției, treptat venind la funcția originală care a generat o mulțime de copii proprii.

Bună ziua, nu înțeleg niciodată modul în care această funcție calculează această funcție

dacă (n == 1) retur 1; // Dacă noua valoare este 1, o vom adăuga cu 1, nu cu cea precedentă. deoarece cel precedent este zero. iar adăugarea lui 1 + 0 este infinită.
altceva sumă de returnare (n-1) + n; // dar dacă n> 1, atunci adăugați-l cu valoarea precedentă egală cu suma tuturor elementelor până la n
>

Potrivit înțelegerii mele să fie de 5 n nu se potrivește cu condiția atunci când se realizează codul sumei (n-1) + n 5, care urmează să fie adăugat că este derivată prin scăderea paranteze, dar care (5 - 1) 5, și dacă da, ce opri această acțiune aritmetică. Care este valoarea anterioară, de unde vine?

Da, aproape totul, așa cum am înțeles (în ultimul paragraf ai arătat recursivitatea))), dar întrebarea rămâne: cum este suma sumă, pe care apoi o introduceți pe ecran?
Lucrez cu Dev C ++, acest exemplu arată suma == 15, dacă se calculează așa cum este scris în exemplul respectiv, suma se dovedește a fi diferită.
Am scris mai sus, aici luam (5-1) + 5 = 4 + 5 = 9
Și nu este destul de logic să ajungeți în linia a 8-a dacă schimbați numărul returului de la întoarcerea 1 la 2, suma se schimbă la 16, deoarece această condiție este asociată cu linia a 9-a?

(5) // Am dat 5 funcții, am verificat-o pentru egalitate cu unitatea. nu egal, numit funcția din nou, oferindu-i 5-1
(5-1 + (5)).
(4-1 + (5-1 + (5)))
(3-1 + (4-1 + (5-1 + (5)))
(2-1 + (3-1 + (4-1 + (5-1 + (5)

2-1 == 1, a terminat apelarea funcției.
(2-1 + (3-1 + (4-1 + (5-1 + (5)))) = 15
acesta este rezultatul.
Aici rezultatul funcției este diferența dintre primele două numere, iar n este restul dreptului
__________________________________
Este doar necesar să înțelegem corect și să acceptăm funcția ca o valoare calculată și să nu o înțelegem ca o variabilă. Este similară cu o variabilă, dar mai aproape de constanta calculată. deși nu este o constantă, este mai ușor să o percepem.

Da, da, da, nu am avut timp să scriu că am înțeles, totul este adevărat, ceva nu sa întâmplat imediat. Vă mulțumim un site bun))

Și nu este destul de logic să ajungeți în linia a 8-a dacă schimbați numărul returului de la întoarcerea 1 la 2, suma se schimbă la 16, deoarece această condiție este asociată cu linia a 9-a?
Și cu acest lucru, totul este clar, întoarce-te 2, adaugă suma, ca să spui privarea ta de zi.

Articole similare