Buna! Ma poate ajuta cineva cu conversia acestui program din interativ in recursiv? (Programul primeste un drum care merge spre nord (n) & est (e) si trebuie sa afiseze drumul de intoarcere transformand nordul in sud (s) si estul in vest (v) ). Multumesc frumos!
#include
#include
char d[101];
void drum()
{int n,i;
gets(d);
n=strlen(d);
for(i=0;i {if(d[i]=='n')
d[i] ='s';
if(d[i] =='e')
d[i] ='v';}
for(i=n;i>=0;i--)
printf("%c",d[i]);
}
int main()
{ printf("DRUM: ");
drum();
return 0;
}
Răspunsuri la întrebare
Răspuns de
3
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;
}
biancarobertaloxzab8:
Multumesc foarte mult! O seara placuta!
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă