Stampa figura tramite ricorsione

Gianni911
Ciao a tutti,volevo stampare una figura tramite una ricorsione in mezzo
void stamparombo(int n,int k=0){
                   if(n==0)return;
                   for(int i=0;i<k;i++)cout<<' ';
                   for(int j=0;j<n-k;j++)cout<<'*';
                   cout<<endl;
                   stamparombo(n-1,k+1);
                   for(int i=0;i<k;i++)cout<<' ';
                   for(int j=0;j<n-k;j++)cout<<'*';
                   cout<<endl;
                   }

Per la precisione un triangolo prima rovesciato poi dritto,con entrambe le punte,il problema é riesco ad ottenere la figura ma le punte non sono unite..
output

Consigli per togliere gli spazzi??
Grazie..

Risposte
Rggb1
"Spazzi"? ;)

Comunque, la funzione manda in cout a-capo sempre, sia che stampi qualcosa sia che non stampi nulla... questo ti dice niente?

Gianni911
"Rggb":
"Spazzi"? ;)

ehm lo spazio,come dovrei chiamarlo :lol:
"Rggb":
"
Comunque, la funzione manda in cout a-capo sempre, sia che stampi qualcosa sia che non stampi nulla... questo ti dice niente?

Guarda,uso da poco questo tipo di ricorsione e non riesco a capire bene perchè succede e come risolverlo.. :?

apatriarca
Come ha già detto Rggb, vai a capo anche quando non stai stampando nulla. Ma il vero problema NON è che vai a capo in quei casi, ma che stai proseguendo nella ricorsione anche quando non dovresti. Infatti, stampi qualcosa solo quando \((n-k) > 0\), ma ti fermi nella ricorsione solo quando \(n == 0\). Siccome \(k > 0\) ad ogni iterazione successiva alla prima, continui la tua iterazione anche quando hai già smesso di stampare. Prova a cambiare la condizione di terminazione del ciclo o a rivedere la relazione tra \(n\) e \(k\).

Gianni911
Ho sostituito
if(n==0)return;
con
if(n<k)return;

Pare funzionare..
Grazie adesso ci sto capendo qualcosa in più!! :-D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.