Sissejuhatus C # rekursiivsesse funktsiooni
Rekursiivne funktsioon C # -s tähendab rekursioon sama tähendust nagu inglise keeles, mida nimetatakse korduvaks. Seega tähendab funktsiooni rekursiivne olemus sama töö korduvat tegemist. Ja jah, kui programmi ei käsitata õigesti, käivitaks see programmi kindlasti pidevas ahelas. Peame veenduma, et täpsustame nende rekursiivsete funktsioonide täitmisel õiged tingimused, vastasel juhul kutsub funktsioon ennast ikka ja jälle uuesti esile, mis viib programmi pideva täitmiseni. Vaatame edasi, kuidas saaksime neid funktsioone luua C # -s.
Rekursiivsete funktsioonide süntaks C # -s
Siin on süntaks sama, mis põhifunktsiooni süntaksil C # -s. Vaatame siin.
Siin pole spetsiaalset süntaksi, kuid võime täheldada, et funktsioon helistab ise tagasituleku saamiseks. Ja me peame olema nende parameetrite väärtuste rekursiivsesse funktsiooni ülekandmisel väga ettevaatlikud, kuna ilmselgelt ei soovi me töötavat koodi, mis ei lõpe.
Ülaltoodud süntaksis pole midagi sellist, peame funktsiooni kutsuma ainult tagasitulekute korral. Pigem saame muutujale määrata isegi rekursiivse funktsiooni tagasiväärtuse ja tagastada ka see muutuja.
Faktoriseerimise teostamine
Siinkohal võtame meie rekursiivse funktsiooni genereerimiseks vaikeprobleemi avalduse Factorization.
Kood:
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);
)
)
Vaadakem samm-sammult protsessi.
- Esiteks oleme loonud oma parameetrilise funktsiooni, et võtta põhifunktsioonist sisendväärtus, mille jaoks tahame arvutada faktoriaalväärtuse.
- Seejärel koostasime if-tingimuse, et kontrollida, kas antud arv on null. Kui arv on null, tagastame vaikeväärtusena 1.
- Muu hulgas korrutame praeguse arvu funktsiooniga, mille parameetriks on number miinus 1.
- Niisiis, see korrutamine kordub, kuni saame arvuni 0. Kuna vaikimisi on meie tagastatav väljund nulliks kirjutatud kui 1, korrutatakse lõpptulemus 1-ga.
Väljund:
Nüüd asendan koodis meie funktsiooni parameetri numbriga 1 kuni numbrini. Sel juhul kutsub funktsioon ennast ikka ja jälle tagasi ja protsess kordub.
Kood:
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äljund:
Ülaltoodud väljundi kaudu näeme selgelt korstna ületäitumise erandit, kus funktsioon kutsub ennast korduvalt. Esimese programmi suhtes muudetakse ainult esiletõstetud osa.
Samamoodi saame numbri muuta kasutaja sisestatud väärtuseks nagu allpool:
Kood:
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äljund:
Mis siis, kui anname sisendina nulli? Jah, üks tagastatakse.
Väljund:
Mis siis saab, kui anname negatiivse arvu?
Väljund:
See andis mulle ka stacki ületäitumise erandi, kuna meie faktoriaalkursuse funktsioon vähendab parameetri väärtust igal täitmisel. Niisiis, negatiivsed arvud vähendatakse -6, -7, -8 ja nii edasi. See on põhjus, miks me selle erandi juurde läheme.
Kas võite proovida negatiivsete arvude jaoks rekursiivse funktsiooni loomist?
Vihje: võime võtta eeltingimuse, mis on väiksem kui null, ja lisada üks selle meie rekursiivse funktsiooni parameetrisse, kuni null tuleb.
Näited C # rekursiivsest funktsioonist
On vähe häid näiteid, mida saab tsiteerida rekursiivsete funktsioonide osas:
Meil on veel mõned kohad, kus neid rekursiivseid funktsioone kasutada.
- Printige antud alguspunktist ja lõpp-punktist numbreid pidevalt. (Programm allpool)
- Lisage numbrid, mis algavad antud alguspunktist ja lõpetage lõpp-punktiga või siis, kui on saavutatud kindel summa.
- Printige numbrid, mis on jagatud mis tahes kindla numbriga suvalises vahemikus.
- Tahame pärast lause kirjutamist välja printida suvaliste arvu pidevaid jooni või punkte ja palju muud.
Nagu näete, on rekursiivne funktsioon sarnane ahela funktsionaalsusega, kuid kus me kutsume sama funktsiooni korduvalt.
Vaatame, kuidas saame kirjutada rekursiivset funktsiooni numbrite pideval lisamisel, kuni programm leiab teise sisendina antud numbri.
Kood:
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;
)
)
Siin tegime järgmist:
- Kasutajate sisendite kaudu oleme võtnud kaks numbrit num1 ja num2
- Funktsioon Lisa, lisab numbrid alates num1 kuni see saab num2.
Näiteks kui ma võtan num1 = 5 ja num2 = 8, siis saadav väljundsumma on 5 + 6 + 7 + 8, mis on 26.
Väljund:
Ja mis siis, kui ma annan num1 vähem kui num2?
Väljund:
See annab esimesena num1 väärtuse, siis määrasime summa väärtuseks num1 väärtuse ja tagastatava summa, kui if-lause pole rakendatav.
Kas saate treeninguna kirjutada rekursiivse funktsiooni, et printida “Mulle meeldib kodeerimine”, kuni see järgib teatud tingimust?
Vihje: võime järgida sama lisamisprotseduuri, mida tehakse ülaltoodud programmis.
Järeldus
Niisiis, siin on edukalt saadud rekursiivsete funktsioonide täitmine, kuidas neid funktsioone kutsutakse ja mõned näited nende kohta. Samuti saime teada, kuidas funktsiooni kutsumise lihtne erinevus võib muuta programmi piire otsa ja luua erandi.
Soovitatavad artiklid
See on juhend C # rekursiivse funktsiooni kohta. Siin käsitleme rekursiivse funktsiooni genereerimist koos selle näidetega. Lisateavet leiate ka meie muudest seotud artiklitest -
- Anonüümsed funktsioonid Matlabis
- Tableau keelte funktsioonid
- Mis on funktsionaalne testimine?
- C # funktsioonid
- Sissejuhatus C ++ rekursiivsesse funktsiooni
- Siit saate teada 3 Java-sisestuse lugemise viisi