Recursiv este o metodă care se numește ea însăși. Această recurență se numește recursiune directă. Există, de asemenea, o recursiune indirectă atunci când două sau mai multe metode se cheamă reciproc. Dacă metoda se solicită ea însăși, o copie a valorilor parametrilor săi este creată pe stivă, la fel ca atunci când este apelată metoda normală, după care controlul este trecut la primul executabil al metodei. Când apelați din nou, acest proces se repetă.
În mod clar, pentru a finaliza calculul, fiecare metodă recursivă trebuie să conțină cel puțin o ramură nerecursivă a algoritmului care se termină cu operatorul de retur. Când metoda este terminată, partea corespunzătoare a stiva este eliberată și controlul este transferat la metoda de apelare, execuția continuând din punctul care urmează apelului recursiv.
Un exemplu clasic al unei funcții recursive este funcția factorială (aceasta nu înseamnă că factorialul trebuie calculat așa). Pentru! Pentru obținerea valorii factorială a numărului n, este necesar să se înmulțească cu n factorul numărului (n - 1). De asemenea, este cunoscut faptul că 0! = 1 și 1! = 1:
fapt lung (lung n)
retur 1; // sucursală nerecursivă
retur (n * fapt (n - 1)); // sucursală recursivă
Același lucru poate fi scris în mai scurt:
fapt lung (lung n)
retur (n> 1). n * fapt (n - 1). 1;
Metodele recursive sunt utilizate cel mai adesea pentru implementarea compactă a algoritmilor recursivi, precum și pentru lucrul cu structurile de date descrise recursiv, de exemplu, cu arbori binari (conceptul unui arbore binar este dat în Capitolul 13). Orice metodă recursivă poate fi implementată fără recurs, programatorul trebuie să se asigure că toate datele necesare sunt stocate independent.
Avantajele recursivității includ compactitatea înregistrării, lipsa timpului și a memoriei pentru apelurile repetate ale metodei și transferul parametrilor către ea și, cel mai important, pericolul de supraîncărcare a stivei.
Metode cu un număr variabil de argumente
Uneori este convenabil să creați o metodă în care să puteți transmite un număr diferit de argumente. Limba C # oferă această opțiune cu cuvântul cheie param. Parametrul etichetat cu acest cuvânt cheie este ultimul din lista de parametri și indică o matrice a unui anumit tip de lungime nedefinită, de exemplu: public int Calculate (int a .out int cu parametrii int [] d).
În această metodă, puteți transfera trei sau mai mulți parametri. În cadrul metodei, la parametrii care încep de la a treia, ele sunt tratate ca elemente obișnuite ale matricei. Număr de
elementele matricei sunt obținute utilizând proprietatea Lungime. De exemplu, luați în considerare metoda de calcul a valorii medii a elementelor matrice (listele 7.1).
Listing 7.1. O metodă cu un număr variabil de parametri
public static dublu mediu (params int [] a)
Rezultatul programului:
Nu există argumente suficiente în metodă
În acest algoritm, absența argumentelor la apelarea metodei medii este o eroare. Acest caz este tratat prin generarea unei excepții. Dacă nu procesați această eroare, rezultatul calculării mediei va fi egal cu "nu numărul" (NaN) datorită împărțirii cu zero a instrucțiunii de întoarcere a metodei.
Parametrul matricei poate fi numai unul și trebuie să fie ultimul din listă. Argumentele corespunzătoare trebuie să aibă tipuri pentru care este posibilă o conversie implicită într-un tip de matrice.