Răspuns :
Un program recursiv se apeleaza pe el insusi. Deci am dori o functie care ia element cu element din vector, il transforma conform conditiilor, il printeaza si apoi se apeleaza pe ea insasi pentru a continua cu urmatorul element.
2 lucruri sunt importante la un program recursiv
1) Cand sa se opreasca recursivitatea. Spre deosebire de unul iterativ unde ii spui unde sa se opreasca(cand i<n) la recursivitate trebuie sa pui o conditie de baza. In cazul nostru, observam ca trebuie sa incepem afisarea de la coada la cap(al doilea loop for) si capatul este atunci cand n=0. Deci conditia de oprire ar fi ca n<0.
2) Testarea conditiilor si trecerea la pasul urmator. La testare avem cele 2 conditii if si afisare caracter. Ca sa trecem la urmatoarul caracter, scadem valoarea lui n cu 1, si apoi apelam programul din nou pentru restul de caractere ramase.
Observam ca recursia se face in functie de n. Daca n ramane la aceeasi valoare, conditia de testare s-ar face pe acelasi caracter si recursia devine diferita. Deci trebuie sa determinam pe n(lungimea sirului) anterior intrarii in recursie, si la fel sa citim sirul de caractere. Atunci, am mai adaugat o functie de citire si apoi am introdus recursia propriu zisa
#include <stdlib.h>
#include <conio.h>
char d[101];
int n;
//citim sirul si determinal lungimea
void citire(){
gets(d);
n=strlen(d);
}
void drum()
{
//conditie stop recursie
//daca n este mai mic decat 0,nu se mai face recursie
//altfel se face
if(n>-1){
//conditii testare pe caracterul actual
if(d[n]=='n')
d[n] ='s';
if(d[n] =='e')
d[n] ='v';
//printare caracter de intoarcere
printf("%c",d[n]);
//trecem cu un caracter in spate
n=n-1;
//incepem din nou recursia
drum();
}
}
int main()
{ printf("DRUM: ");
citire();
drum();
return 0;
}
2 lucruri sunt importante la un program recursiv
1) Cand sa se opreasca recursivitatea. Spre deosebire de unul iterativ unde ii spui unde sa se opreasca(cand i<n) la recursivitate trebuie sa pui o conditie de baza. In cazul nostru, observam ca trebuie sa incepem afisarea de la coada la cap(al doilea loop for) si capatul este atunci cand n=0. Deci conditia de oprire ar fi ca n<0.
2) Testarea conditiilor si trecerea la pasul urmator. La testare avem cele 2 conditii if si afisare caracter. Ca sa trecem la urmatoarul caracter, scadem valoarea lui n cu 1, si apoi apelam programul din nou pentru restul de caractere ramase.
Observam ca recursia se face in functie de n. Daca n ramane la aceeasi valoare, conditia de testare s-ar face pe acelasi caracter si recursia devine diferita. Deci trebuie sa determinam pe n(lungimea sirului) anterior intrarii in recursie, si la fel sa citim sirul de caractere. Atunci, am mai adaugat o functie de citire si apoi am introdus recursia propriu zisa
#include <stdlib.h>
#include <conio.h>
char d[101];
int n;
//citim sirul si determinal lungimea
void citire(){
gets(d);
n=strlen(d);
}
void drum()
{
//conditie stop recursie
//daca n este mai mic decat 0,nu se mai face recursie
//altfel se face
if(n>-1){
//conditii testare pe caracterul actual
if(d[n]=='n')
d[n] ='s';
if(d[n] =='e')
d[n] ='v';
//printare caracter de intoarcere
printf("%c",d[n]);
//trecem cu un caracter in spate
n=n-1;
//incepem din nou recursia
drum();
}
}
int main()
{ printf("DRUM: ");
citire();
drum();
return 0;
}
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile disponibile v-au fost utile și inspiraționale. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, suntem aici pentru a vă ajuta. Ne face plăcere să vă revedem și vă invităm să adăugați site-ul nostru la favorite pentru acces rapid!