Rekursiivinen toiminto C # -: ssa Syntaksi ja rekursiivisen funktion suorittaminen C #: ssä

Sisällysluettelo:

Anonim

Johdatus rekursiiviseen toimintaan C #: ssä

C #: n rekursiivisessa toiminnossa rekursio tarkoittaa samaa merkitystä kuin englanniksi, tarkalleen nimeltään toistaen itseään. Joten toiminnon rekursiivinen luonne tarkoittaa saman työn tekemistä toistuvasti. Ja kyllä, jos ohjelmaa ei käsitellä oikein, se ajaa ohjelman ehdottomasti jatkuvassa silmukassa. Meidän on varmistettava, että määrittelemme asianmukaiset ehdot näiden rekursiivisten toimintojen suorittamisessa, muuten toiminto kutsuisi itseään uudestaan ​​ja uudestaan, mikä johtaisi ohjelman jatkuvaan suorittamiseen. Mennään eteenpäin katsomaan, kuinka voimme luoda nämä toiminnot C #: ssa.

Rekursiivisten toimintojen syntaksi C #: ssä

Tässä oleva syntaksi on sama kuin C #: n perusfunktion syntaksi. Katsotaanpa tätä.

Täällä ei ole erityistä syntaksia, mutta voimme huomata, että toiminto kutsuu itseään palautustuloksen tarjoamiseen. Ja meidän on oltava erityisen varovaisia ​​siirtäessämme näitä parametriarvoja siihen rekursiiviseen funktioon, koska emme selvästikään halua käynnissä olevaa koodia, joka ei lopu.

Yllä olevassa syntaksissa ei ole mitään sellaista, meidän on kutsuttava funktio vain paluulausekkeisiin. Pikemminkin, voimme jopa määrittää rekursiivisen funktion paluuarvon muuttujalle ja palauttaa myös kyseinen muuttuja.

Faktorisoinnin suorittaminen

Otetaan tässä rekursiivisen funktion luomiseen oletusongelma lausunto Factorization.

Koodi:

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);
)
)

Katsokaamme vaihe vaiheelta.

  1. Ensinnäkin, olemme luoneet oman parametrisoidun funktion ottamaan syöttöarvon päätoiminnosta, jolle haluamme laskea tekijän.
  2. Sitten teimme if-edellytyksen tarkistaaksemme, onko annettu luku nolla. Jos luku on nolla, palautamme oletusarvoksi yhden.
  3. Muutoin, me kerrotaan nykyinen luku funktion kanssa, jonka parametriksi otetaan luku miinus 1.
  4. Joten tämä kertoaminen toistuu, kunnes saamme numeroon 0. Koska oletuksena olemme kirjoittaneet paluulähdölle nolla nollaksi, lopputulos kerrotaan yhdellä.

lähtö:

Nyt koodissa aion korvata toimintaparametrimme numerosta miinus 1 numeroon. Tässä tapauksessa toiminto kutsuisi itseään uudestaan ​​ja uudestaan ​​ja prosessi toistuisi.

Koodi:

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);
)
)

lähtö:

Yllä olevan ulostulon kautta näemme selvästi pinojen ylivuotopoikkeuksen, jossa toiminto kutsuu toistuvasti itseään. Vain korostettu osa muuttuu suhteessa ensimmäiseen ohjelmaan.

Samalla tavoin voimme tehdä numeron käyttäjän syöttämäksi arvoksi kuten alla:

Koodi:

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);
)
)

lähtö:

Entä jos annamme tuloksi nollan? Kyllä, yksi palautetaan.

lähtö:

Entä jos annamme negatiivisen luvun?

lähtö:

Tämä antoi minulle myös Stack-ylivuotopoikkeuksen, koska tekijäkorjausfunktiomme alentaa parametrin arvoa jokaisessa suorituksessa. Joten negatiiviset luvut pienenevät arvoihin -6, -7, -8 ja niin edelleen. Tästä syystä siirrymme tähän poikkeukseen.

Voitko yrittää luoda rekursiivisen funktion negatiivisille numeroille?

Vihje: Voimme ottaa ehdon, joka on vähemmän kuin nolla, ja lisätä yksi rekursiivisen funktion parametriin, kunnes nolla tulee.

Esimerkkejä C #: n rekursiivisesta toiminnasta

Muutamia hyviä esimerkkejä voidaan lainata rekursiivisten toimintojen suhteen:

Meillä on muutama paikka, jossa voimme käyttää näitä rekursiivisia toimintoja.

  • Tulosta numeroita tietystä aloituspisteestä ja päätepisteestä jatkuvasti. (Ohjelma alla)
  • Lisää numerot tietystä aloituspisteestä ja lopeta loppupisteessä tai kun tietty summa on saavutettu.
  • Tulosta numerot, jotka on jaettu millä tahansa tietyllä numerolla millä tahansa tietyllä alueella.
  • Haluamme tulostaa kaikki jatkuvien viivojen tai pisteiden määrät lauseen kirjoittamisen jälkeen ja paljon muuta.

Kuten voidaan huomata, rekursiivinen toiminto on samanlainen kuin silmukan toiminnallisuus, mutta missä kutsumme samaa toimintoa toistuvasti.

Katsotaan kuinka voimme kirjoittaa rekursiivisen funktion lisäämällä numeroita jatkuvasti, kunnes ohjelma löytää toisen numeron, joka annetaan syötteenä.

Koodi:

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;
)
)

Tässä mitä teimme:

  • Olemme ottaneet kaksi numeroa num1 ja num2 käyttäjän syötteiden kautta
  • Lisää toiminto lisää numerot numerosta num1 alkaen, kunnes se saa num2.

Esimerkiksi, jos otan num1 = 5 ja num2 = 8, niin saamme tulosumman summa on 5 + 6 + 7 + 8, mikä on 26.

lähtö:

Entä jos annan num1 vähemmän kuin num2?

lähtö:

Se antaa jonkin verran kuin num1-arvon ensin, määrittelimme summa-arvon num1-arvoon ja palauttavan summan, jos if-lause ei ole sovellettavissa.

Voitko harjoituksena kirjoittaa rekursiivisen funktion tulostaaksesi "Pidän koodauksesta", kunnes se noudattaa tiettyä ehtoa?

Vihje: Voimme noudattaa samaa lisäysmenettelyä, joka tehdään yllä olevassa ohjelmassa.

johtopäätös

Joten, täällä olemme onnistuneesti saaneet aikaan rekursiivisten toimintojen suorittamisen, kuinka näitä funktioita kutsutaan ja muutamia esimerkkejä niistä. Opimme myös, kuinka yksinkertainen ero funktion kutsumisessa voi saada ohjelman loppumaan rajoistaan ​​ja luomaan poikkeuksen.

Suositellut artikkelit

Tämä on opas rekursiiviseen toimintaan C #: ssä. Tässä keskustellaan suorituksesta rekursiivisen funktion luomiseksi sen esimerkkien kanssa. Voit myös käydä läpi muiden aiheeseen liittyvien artikkeleidemme saadaksesi lisätietoja-

  1. Nimettömät toiminnot Matlabissa
  2. Tableau-kielen toiminnot
  3. Mikä on toiminnallinen testaus?
  4. C # toiminnot
  5. Johdatus rekursiiviseen toimintaan C ++: ssa
  6. Opi kolme tapaa lukea Java-käyttäjän syöttä