
刚学c语言,数字金字塔用循环会做,但用递归却没有思路,希望各位指点
void print(int n)
{
int j = n - 1, k = 1; // j表示每层的空格数,k表示层数
for(;k <= n; k++)
{
printf("%*s", j--,""); // 输出空格
int i = 1;
while (i < 2 * k) printf("%d", i++); // 输出数字
puts("");
}
}
void print2(int n)
{
int i = 0; // i表示层数
char ch = '\0';
char str[] = "123456789"; // 根据实际需求定义长度
while(i++ < n)
{
swap(str[i * 2 - 1], ch);
printf("%*s\n", i + n - 1, str);
swap(str[i * 2 - 1], ch);
/* // 不使用swap函数
ch = str[i*2-1];
str[i*2-1] = '\0';
printf("%*s\n", i + n - 1, str);
str[i*2-1] = ch;
*/
}
}
// 递归
void PrintNum(int n)
{
if(n > 1) PrintNum(n - 1);
char str[] = "123456789"; // 根据实际需求定义长度
str[2 * n -1] = '\0';
printf("%*s\n", n+4, str);
}
int main()
{
print(5); puts("");
print2(5); puts("");
PrintNum(5);puts("");
return 0;
}
//输出前导空格
void space(int n)
{
if (n == 0)
return;
printf(" ");
space(n - 1);
}
//输出列,n=0递减
void fun1(int inx, int n)
{
if (inx == n)
return;
printf("%d", inx);
if (n != 0)
fun1(inx + 1, n);
else
fun1(inx - 1, 0);
}
//输出行
void fun(int inx, int n)
{
if (inx > n)
return;
space(n - inx); //空格
fun1(1, inx); //递增
fun1(inx, 0); //递减
printf("\n");
fun(inx + 1, n); //下一行
}
int main()
{
int i, j, k, n = 5;
fun(1, n);
return 0;
}