【发布时间】:2021-11-29 12:15:39
【问题描述】:
我是 C 的新手。我试图实现一个串行的drawPyramid 函数。现在,我想为自己的实践实现这个函数drawPyramid_rec 的递归版本。但是,我被困了几个小时。不知道如何处理每行中的前导空格......我觉得我必须以某种方式在第一次递归调用中存储 n 的值。或者也许不可能实现drawPyramid 的递归版本?请帮忙!
#include <stdio.h>
void drawPyramid(int n);
int main(void)
{
int n;
do
{
printf("Height: ");
scanf("%i", &n);
}
while (n > 8 || n < 1);
drawPyramid(n);
return 0;
}
void drawPyramid(int n)
{
for (int height = 1; height <= n; ++height)
{
for (int column = (n - height); column >= 1; --column)
{
printf(" "); // putchar(' ');
}
for (int column = 1; column <= height; ++column)
{
putchar('#'); // printf("#");
}
printf(" ");
for (int column = 1; column <= height; ++column)
{
printf("#");
}
printf("\n");
}
}
输出:
Height: 5
# #
## ##
### ###
#### ####
##### #####
【问题讨论】:
-
请展示您对递归解决方案的尝试
-
“我觉得我必须在第一次递归调用中存储 n 的值。” -> 是的,或者函数应该以其他方式知道(最大)高度,例如使用
static或全局变量。这个额外的变量是必要的,因为在每一行函数必须知道两个独立的值:空格数和#字符数。
标签: c recursion function-definition