Esta podría ser una solución elegante
#include <stdio.h>
void rombo(unsigned altura) {
...
if(i<h) { // Mientras el reglón no ha llegado a la altura del rombo
int j;
for(j=0; j<=h/2-w/2; ++j) // Calculo los espacios por escalon
for(j=0; j<w; ++j) // Imprimo
putchar('\n'); // Al siguiente reglón ...}
int main() {
rombo(6);
}
hmmm... por lo general, si se meten bucles, se pierde la recursividad (caso base, caso recursivo, funcion de avance...
Mi propuesta
height: 0
*
height: 2
*
***
*
height: 4
*
***
*****
***
*
height: 6
*
***
*****
*******
*****
***
*
height: 8
*
***
*****
*******
*********
*******
*****
***
*
height: 10
*
***
*****
*******
*********
***********
*********
*******
*****
***
*
height: 12
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
height: 14
*
***
*****
*******
*********
***********
*************
***************
*************
***********
*********
*******
*****
***
*
height: 16
*
***
*****
*******
*********
***********
*************
***************
*****************
***************
*************
***********
*********
*******
*****
***
*
height: 18
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*****************
***************
*************
***********
*********
*******
*****
***
*
height: 20
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*********************
*******************
*****************
***************
*************
***********
*********
*******
*****
***
*
height: 22
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*********************
***********************
*********************
*******************
*****************
***************
*************
***********
*********
*******
*****
***
*
height: 24
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*********************
***********************
*************************
***********************
*********************
*******************
*****************
***************
*************
***********
*********
*******
*****
***
*
#include <stdio.h>
void printLineR(const int N, const int n,const int start)
{
if (start==N+1) return;
else
{
const int nn = n<=(N/2)?n:N-n;
if (start
< (N
/2) - nn
) printf(" "); if ((((N
/2) - nn
)<=start
) && (start
<= (N
/2 + nn
))) printf("*"); if ((start
> (N
/2 + nn
))) printf(" "); printLineR(N,n<=(N/2)?n:N-n,start+1);
}
}
void printLine(const int N,const int n)
{
printLineR(N,n,0);
}
void diamondR(const int N, const int n)
{
if (n == N+1) return;
else
{
printLine(N,n);
diamondR(N,n+1);
}
}
/* 0 <= N */
void diamond(const int N)
{
diamondR(N,0);
}
int main()
{
int N=25;
for (int n=0; n<N ; n+=2 )
{
diamond(n);
}
}