Úvod do rekurzívnej funkcie v C #
V rekurzívnej funkcii v jazyku C # znamená rekurzia rovnaký význam ako v anglickom jazyku, ktorý sa presne nazýva opakovanie. Rekurzívna povaha funkcie znamená opakované vykonávanie tej istej práce. A áno, ak sa s programom nebude správne zaobchádzať, určite by ho spustil v nepretržitej slučke. Musíme sa ubezpečiť, že pri vykonávaní týchto rekurzívnych funkcií určíme správne podmienky, inak by táto funkcia volala znova a znova, čo by viedlo k nepretržitému vykonávaniu programu. Poďme ďalej a pozrime sa, ako môžeme tieto funkcie vytvoriť v C #.
Syntax rekurzívnych funkcií v C #
Syntax tu je rovnaká ako syntax základnej funkcie v C #. Pozrime sa sem.
Nie je tu žiadna špeciálna syntax, ale môžeme pozorovať, že funkcia sa volá pri poskytovaní výsledku vrátenia. A musíme byť veľmi opatrní pri odovzdávaní týchto hodnôt parametrov do tejto rekurzívnej funkcie, pretože samozrejme nechceme spustiť kód, ktorý sa nezastaví.
Vo vyššie uvedenej syntaxi neexistuje nič podobné, musíme túto funkciu nazývať iba v príkazoch na návrat. Skôr môžeme dokonca priradiť návratovú hodnotu rekurzívnej funkcie k premennej a túto premennú tiež vrátiť.
Vykonanie faktorizácie
Vezmime si naše predvolené vyhlásenie o probléme, faktorizácia, na generovanie našej rekurzívnej funkcie.
kód:
using System;
class First (
static void Main() (
int result;
result = fact(7);
Console.WriteLine("Factorial is : " + result);
)
public static int fact(int num)
(
if(num==0)
(
return 1;
)
return num*fact(num-1);
)
)
Pozrime sa na postupný postup.
- Najprv sme vytvorili vlastnú parametrizovanú funkciu, aby sme prevzali vstupnú hodnotu z hlavnej funkcie, pre ktorú chceme vypočítať faktoriál.
- Potom sme vytvorili podmienku if, aby sme skontrolovali, či je dané číslo nula. Ak je číslo nula, vrátime 1 ako našu predvolenú hodnotu.
- Inak vynásobíme súčasné číslo funkciou prevzatou ako mínus číslo 1.
- Takže toto násobenie sa opakuje, až kým sa nedostaneme na číslo 0. Ako predvolene sme napísali náš návratový výstup pre nulu ako 1, konečný výsledok by sa vynásobil 1.
Výkon:
Teraz v kóde nahradím náš funkčný parameter z num mínus 1 na num. V tomto prípade by sa funkcia volala znova a znova a proces by sa opakoval.
kód:
using System;
class First (
static void Main() (
int result;
result = fact(7);
Console.WriteLine("Factorial is : " + result);
)
public static int fact(int num)
(
if(num==0)
(
return 1;
)
return num*fact(num);
)
)
Výkon:
Prostredníctvom vyššie uvedeného výstupu môžeme jasne vidieť výnimku pretečenia zásobníka, kde funkcia opakovane volá sama seba. V porovnaní s prvým programom sa zmení iba zvýraznená časť.
Rovnakým spôsobom môžeme urobiť číslo ako hodnotu zadanú používateľom, ako je uvedené nižšie:
kód:
using System;
class First (
static void Main() (
int result, c;
string a;
Console.Write("Enter value for number :");
a = Console.ReadLine();
c = Convert.ToInt32(a);
result = fact(c);
Console.WriteLine("Factorial is : " + result);
)
public static int fact(int num)
(
if(num==0)
(
return 1;
)
return num*fact(num-1);
)
)
Výkon:
Čo ak zadáme nulu ako vstup? Áno, niekto by sa vrátil.
Výkon:
Čo ak teda zadáme záporné číslo?
Výkon:
To mi tiež prinieslo výnimku pretečenia zásobníka, pretože naša funkcia faktoriálnej rekurzie znižuje hodnotu parametra pri každom spustení. Záporné čísla by sa tak znížili na -6, -7, -8 atď. To je dôvod, prečo ideme k tejto výnimke.
Ako cvičenie, môžete skúsiť vytvoriť rekurzívnu funkciu pre záporné čísla?
Pomôcka: Môžeme mať predbežnú podmienku na číslo menšie ako nula a pridať jednu do nášho rekurzívneho funkčného parametra, kým nula nepríde.
Príklady rekurzívnej funkcie v C #
Existuje niekoľko dobrých príkladov, ktoré možno uviesť s ohľadom na rekurzívne funkcie:
Máme niekoľko ďalších miest, kde môžeme tieto rekurzívne funkcie využívať.
- Neustále tlačte čísla z daného počiatočného bodu a koncového bodu. (Program nižšie)
- Pridajte čísla začínajúce sa od daného počiatočného bodu a zastavujúce sa v koncovom bode alebo po dosiahnutí konkrétnej sumy.
- Vytlačte čísla, ktoré sú rozdelené ktorýmkoľvek konkrétnym číslom v ľubovoľnom konkrétnom rozsahu.
- Po napísaní vety chceme vytlačiť ľubovoľný počet súvislých čiar alebo bodov a mnoho ďalších.
Ako môžete pozorovať, rekurzívna funkcia je podobná funkcii slučky, ale kde tú istú funkciu voláme opakovane.
Pozrime sa, ako môžeme písať rekurzívnu funkciu pri nepretržitom pridávaní čísel, kým program nenájde druhé číslo, ktoré je zadané ako vstup.
kód:
using System;
class First (
static void Main() (
int result, c, d;
string a, b;
Console.Write("Enter value for 1st number :");
a = Console.ReadLine();
c = Convert.ToInt32(a);
Console.Write("Enter value for 2nd number :");
b = Console.ReadLine();
d = Convert.ToInt32(b);
result = add(c, d);
Console.WriteLine("Add is : " + result);
)
public static int add(int num1, int num2)
(
int sum ;
sum=num1;
if (num1 < num2 )
(
num1++;
sum=sum+add(num1, num2);
return sum;
)
return sum;
)
)
Čo sme urobili, je:
- Prostredníctvom užívateľských vstupov sme vzali dve čísla num1 a num2
- Funkcia Add, pridáva čísla od čísla num1 až po číslo num2.
Napríklad, ak vezmem num1 = 5 a num2 = 8, výstupná suma, ktorú dostaneme, je 5 + 6 + 7 + 8, čo je 26.
Výkon:
A čo keď dám num1 menej ako num2?
Výkon:
Ako prvú uvedie hodnotu num1, hodnotu num1 priradíme súčet súčtu a ak nie je príkaz if použiteľný, vráti sa súčet.
Ako cvičenie môžete napísať rekurzívnu funkciu, aby ste vytlačili „Páči sa mi kódovanie“, až kým nenasleduje určitú podmienku?
Pomôcka: Môžeme postupovať rovnakým spôsobom ako pri pridávaní, ktoré sa vykonáva vo vyššie uvedenom programe.
záver
Preto sme tu úspešne vykonali rekurzívne funkcie, ako sa tieto funkcie nazývajú a ich niekoľko príkladov. Tiež sme sa naučili, ako jednoduchý rozdiel vo volaní funkcie môže spôsobiť, že program dôjde mimo jeho hranice a vytvorí výnimku.
Odporúčané články
Toto je sprievodca rekurzívnou funkciou v jazyku C #. Tu diskutujeme vykonávanie generovania rekurzívnej funkcie s príkladmi. Viac informácií nájdete aj v ďalších súvisiacich článkoch.
- Anonymné funkcie v Matlabe
- Tabuľkové reťazcové funkcie
- Čo je funkčné testovanie?
- C # Funkcie
- Úvod do rekurzívnej funkcie v C ++
- Naučte sa 3 spôsoby, ako čítať vstup používateľa Java