Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.
Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.
Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.
Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.
Meniu shortcuturi | ? |
Căutare probleme sau utilizatori | / |
Navigare printre rezultatele căutării | ↑, ↓ |
Meniu de contact și feedback | CTRL + Shift + F |
Ieșire din meniuri | Esc |
Setări editor | CTRL + Shift + S |
Schimbare stil editor | CTRL + Shift + E |
Șabloane de cod | CTRL + Shift + 1/2/3 |
Golire editor | CTRL + Shift + 4 |
Dându-se un număr natural n
, să se determine, folosind un subprogram recursiv, oglinditul său.
Exemplu. Pentru n = 1239
, oglinditul este 9321
.
Pentru varianta nerecursivă, puteți să urmăriți acest articol.
Forma nerecursivă calcula astfel oglinditul unui număr: cream o variabilă în care să ținem răspunsul și, pe rând, luam cifrele numărului de la coadă și le adăugam în răspuns. La final, în variabila de răspuns aveam oglinditul nostru. Iată o vizualizare a acestui algoritm:
Variabilă | Valoare |
---|---|
n | 03344993311 |
oglindit | 139430 |
Vom proceda similar în varianta recursivă. Avem o funcție cu doi parametri, n
și raspuns
(care este inițial 0
). Distingem cazurile:
n
mai are cifre, atunci la raspuns
se adaugă ultima cifră a lui n
și se apelează funcția cu n / 10
(n
fără ultima cifră) și noul raspuns
;n
nu mai are cifre, se returnează raspuns
.Iată codul, conform observațiilor de mai devreme:
#include <iostream>
using namespace std;
int oglindit(int n, int raspuns) {
if(n > 0) { //Dacă *n* mai are cifre
int cifra = n % 10; //Luăm ultima cifră a lui *n*
raspuns = raspuns * 10 + cifra; //Adăugăm ultima cifră a lui *n* la *raspuns*
n = n / 10; //Tăiem ultima cifră din *n*
return oglindit(n, raspuns); //Apelăm din nou funcția, cu valorile actualizate ale lui *n* și *raspuuns*
} else { //Dacă *n* nu mai are cifre
return raspuns; //Returnăm răspunsul
}
}
int main()
{
//Declarăm și citim *n*, numărul dat
int n;
cin >> n;
//Afișăm oglinditul, folosindu-ne de o funcție recursivă
cout << oglindit(n, 0); //*raspuns* trebuie să fie inițial 0
}