Johdatus rekursiiviseen toimintaan C ++: ssa
Aloittamalla rekursiivisella toiminnolla C ++: ssa, olemme jo tunteneet C ++ -toimintojen perusajatuksen, joka sisältää funktion määrittelyn kutsua myös muita toimintoja. Ja tämä artikkeli kattaa rekursiivisen määritelmän takana olevan käsitteen, matematiikan pelityökalukonseptin ja ohjelmointilogiikan. Tuttu esimerkki sisältää luvun tekijän, luonnollisten n-lukujen summan jne. Toiminto, joka kutsuu sinänsä, tunnetaan rekursiivisena funktiona. Ne ovat vain toiminto, johon on kutsuttu toistuvasti. Rekursiolla on ongelmanratkaisutyökalu, jossa se jakaa suuret ongelmat yksinkertaisiksi tehtäviksi ja työskentelee erikseen seuraamaan yksittäistä järjestystä.
Tietorakenteiden käsitteet, kuten puun etsiminen, lajittelu ja poikittainen, hyödyntävät rekursiivista funktiota ratkaisuissaan. Tämä ohjelmointitekniikka helpottaa koodin käyttöä. Sekä iterointi että rekursio tekevät saman prosessin kuin koodin toisto, mutta ero rekursioissa on se, että ne suorittavat tietyn osan itse tukitoiminnolla. Tässä artikkelissa keskustelemme rekursion tärkeydestä ja niiden työprosessista yksityiskohtaisella esimerkillä.
Rekursiivisen funktion syntaksi C ++: ssa
Rekursiivisen funktion yleinen syntaksi c ++: ssa on esitetty seuraavasti:
return type function name((arguments))
(
Body of the statements;
function name ((actual arguments)) // recursive function
)
Kuinka rekursiivinen toiminto toimii C ++: ssa?
Rekursio toistaa toimintopuhelut, ja se pysäyttää suorituksen, kun kanta tapaus todetaan. Perusolo-olosuhteet tulisi määritellä rekursiivisessa toiminnossa pinojen ylivuotovirhesanoman välttämiseksi. Jos perustastoa ei määritetä, se johtaa äärettömään toistumiseen. Kun funktiota kutsutaan, se työntää ne pinoon joka kerta resurssien varaamiseksi jokaiselle toistopuhelulle. Se antaa parhaan puiden läpikulun. Rekursioita on kahta eri tyyppiä: suora ja epäsuora rekursio.
Suora rekursiivinen: Kuva
int fibn(n)
(
fib(n);
)
void main ()
(
fib(n);
)
Yllä oleva muoto on suora rekursiivinen puhelu, jossa se soittaa välittömästi / soittaa itse. Harkitse toisen tyyppistä nimitystä epäsuora rekursio, johon liittyy toinen funktion kutsu. Sitä voidaan tarkastella alla olevassa kuvassa:
Epäsuora rekursiivinen: Kuva
void f(int n) (
f1();
return;
)
void f2( int n) (
f();
return;
)
void f1() (
f2();
return;
)
Esimerkkejä rekursiivisesta toiminnasta C ++: ssa
Alla olevassa ohjelmassa voit nähdä ohjelman suorittamisen, jonka olen toimittanut oletusperusteella. Joskus if-else-tilan käyttö rekursiossa auttaa estämään äärettömän rekursion. Koodin prosessi tehdään osittaisen ratkaisun kanssa välituotteessa ja nämä yhdistetään lopulliseksi ratkaisuksi hännän rekursiolla.
Esimerkki # 1
Tässä on yksinkertainen esimerkki numeron Fibonacci-sarjasta. Alla oleva ohjelma sisältää puhelun rekursiiviseen funktioon, joka on määritelty nimellä fib (int n), joka ottaa käyttäjän syötteet ja tallentaa ne 'n': iin. Seuraava vaihe sisältää silmukan ottamisen tuottamaan termi, joka siirretään funktiolle fib () ja palauttaa Fibonacci-sarjan. Perustaso asetetaan if-lauseella tarkistamalla luku = 1 tai 2 kahden ensimmäisen arvon tulostamiseksi. lopuksi tämä rekursiivinen toiminto jatkuu silmukan kanssa tulostamaan sarjan 1, 1, 2.
Koodi:
#include
using namespace std;
int fib_r (int s)
(
if(s==1||s==2)
return 1;
else
return (fib_r(s-1) +fib_r(s-2)); // fib(n-1) + fib(n-2) for adding successive terms
)
int main ()
(
int k, n;
cout<<"Enter no.of n terms: ";
cin>>n;
cout<<" calculated fibonacci numbers are"< for (k=1; k<=n; k++)
cout< return 0;
)#include
using namespace std;
int fib_r (int s)
(
if(s==1||s==2)
return 1;
else
return (fib_r(s-1) +fib_r(s-2)); // fib(n-1) + fib(n-2) for adding successive terms
)
int main ()
(
int k, n;
cout<<"Enter no.of n terms: ";
cin>>n;
cout<<" calculated fibonacci numbers are"< for (k=1; k<=n; k++)
cout< return 0;
)#include
using namespace std;
int fib_r (int s)
(
if(s==1||s==2)
return 1;
else
return (fib_r(s-1) +fib_r(s-2)); // fib(n-1) + fib(n-2) for adding successive terms
)
int main ()
(
int k, n;
cout<<"Enter no.of n terms: ";
cin>>n;
cout<<" calculated fibonacci numbers are"< for (k=1; k<=n; k++)
cout< return 0;
)
lähtö:
Esimerkki 2
Palindrumin numeron tarkistaminen rekursiivisella toiminnolla.
Koodi:
#include
using namespace std;
int palim(int a, int t)
(
if (a == 0)
return t;
t = (t * 10) + (a % 10);
return palim(a / 10, t);
)
int main()
(
int n;
cout<>n;
int result = palim(n, 0);
if (result == n)
cout << "Number "< else
cout << "Number "< return 0;
)#include
using namespace std;
int palim(int a, int t)
(
if (a == 0)
return t;
t = (t * 10) + (a % 10);
return palim(a / 10, t);
)
int main()
(
int n;
cout<>n;
int result = palim(n, 0);
if (result == n)
cout << "Number "< else
cout << "Number "< return 0;
)#include
using namespace std;
int palim(int a, int t)
(
if (a == 0)
return t;
t = (t * 10) + (a % 10);
return palim(a / 10, t);
)
int main()
(
int n;
cout<>n;
int result = palim(n, 0);
if (result == n)
cout << "Number "< else
cout << "Number "< return 0;
)
lähtö:
Esimerkki 3
Ohjelma satunnaislukugeneraattorilla.
Koodi:
#include
#include
#include
#include
using namespace std;
int rand1(int n);
int main () (
int n, j;
int r;
srand(time (NULL));
cout << "Enter number of dice: ";
cin >> n;
for (j = 1; j <= n; j++) (
r = rand1(5) + 1;
cout << r << " ";
)
system("PAUSE");
return 0;
)
int rand1(int n) (
return rand () % n;
)
Yllä oleva ohjelma kuvaa satunnaislukugeneraattoria, kun noppaa vieritään satunnaisesti. Se suoritetaan kutsumalla toiminto rand1 (int n) ja generoi 0 - n-1 numerot. ja asetetaan siemenarvo nollalla (ei osoitetta). Esimerkiksi, jos syötetään numeroina 4, se noppamahdollisuus on 5, 4, 1, 2.
lähtö:
On myös joitain käsitteitä, kuten lineaarinen haku, yhteinen jakaja ja tietyn luvun tärkein tekijä, joka käyttää rekursiivista toteutusta.
Hyödyntäminen rekursioista
- Niiden tarjoama koodi on puhdas ja kompakti yksinkertaistamalla suurempaa monimutkaista ohjelmaa. Käyttää vähemmän muuttujia ohjelmakoodissa.
- Tässä kielletään monimutkainen koodi ja silmukoiden sisäkkäinen sijoittaminen.
- Jotkin osan koodista vaativat jälkiseurannan, joka ratkaistaan rekursiivisesti.
Miinukset rekursio
- Vie enemmän muistia, koska kaikkien toimintopuhelujen pino toimii.
- Se suorittaa toisinaan hitaammin suorittamalla iterointiprosessin. Siksi hyötysuhde on vähemmän.
- Aloittelijoiden on vaikea ymmärtää työskentelyä, koska joskus koodi menee perusteellisesti. jos johtaa tilaa poistumaan ja aiheuttaa lopulta ohjelman kaatumisia.
johtopäätös
Tämän kanssa olemme keskustelleet siitä, kuinka c ++ -toiminnot toimivat ja määritelty rekursiivisesti. Ja olemme käyneet läpi kirjeenvaihdon ja niiden edut ja haitat rekursiivisesta toiminnasta ohjelmointimaailmassa. Sitten jatkoimme osoittamalla, kuinka se voidaan toteuttaa C ++: ssa rekursiivisen funktion määritelmän avulla. Lisäksi johtopäätöksemme on, että rekursio auttaa C ++: aa ratkaisemaan tietorakenteen käsitteiden, kuten siirrot, lajittelu ja etsiminen, ongelmia ja sitä voidaan käyttää tehokkaasti missä tarvitaan.
Suositellut artikkelit
Tämä on opas rekursiiviseen toimintaan C ++: ssa. Tässä keskustellaan siitä, kuinka rekursiivinen toiminto toimii C ++: ssa, syntaksissa, erilaisilla esimerkeillä ja koodin toteutuksella. Voit myös katsoa seuraavia artikkeleita saadaksesi lisätietoja -
- Mikä on C ++ -ryhmän toiminnot?
- Yleiskatsaus C ++ -merkkijono-toimintoihin
- Paras C ++ -kääntäjä (esimerkit)
- Johdanto C ++ -käskyihin
- Fibonacci-sarja Java
- Satunnaislukugeneraattori Matlabissa
- Satunnaislukugeneraattori C: ssä
- Palindromi C ++: ssa
- Satunnaislukugeneraattori JavaScript
- C ++: n 11 tärkeintä ominaisuutta ja hyötyä
- Opi PHP: n ryhmätoimintojen tyypit