【发布时间】:2020-01-20 02:14:17
【问题描述】:
我需要在 C 中递归地绘制一个沙漏。我需要有 1 个辅助函数加上实际函数。以下是函数签名: void helper(无符号整数高度,无符号整数偏移) void real(unsigned int height)
height 描述要绘制的行数,offset 是每行开头的空格数。对于每一行,星星的数量应该减少 2,偏移量应该增加 1,高度应该减少 1,直到到达沙漏的中间。之后,高度应该继续减少,但星数应该增加 2,偏移量应该减少 1。如果输入高度是偶数,那么第一行应该有高度 - 1 星。此外,中间应该有两排只有 1 颗星。如果输入高度是奇数,那么第一行应该有高度星。
Ex) height = 6
*****
***
*
*
***
*****
Ex) height = 5
*****
***
*
***
*****
我必须使用递归,不允许循环。
这是我的辅助函数。我无法弄清楚主要功能。
void draw_hourglass_rec_helper(unsigned int height, unsigned int offset)
{
if (height == 0) {
printf("\n");
} else if (offset == 0) {
printf("*");
draw_hourglass_rec_helper(height-1, 0);
} else {
printf(" ");
draw_hourglass_rec_helper(height, offset-1);
}
}
最佳尝试:
void draw_hourglass_rec(unsigned int height)
{
if(height < 1)
{
return;
}
{
draw_hourglass_rec_helper(height, ((-0.5 * height) + (9.0/2.0)));
draw_hourglass_rec(height-2);
}
}
打印:
**********
********
******
****
**
对于 draw_hourglass_rec(10) 夫妻问题 1) 我无法打印沙漏的下半部分 2)星星的数量应该总是奇数 3)我不知道如何表达偶数输入情况,其中应该有 2 行每行 1 星 4)如果我在奇数高度使用此代码,我会陷入无限循环。
这是我用 C 语言编码的第一周。我真的很难用这种语言表达我的逻辑。
提前谢谢你。
【问题讨论】:
-
无需发布您的所有次失败尝试,但您的最佳次尝试会有所帮助。 “我无法弄清楚主要功能”:你有什么问题?辅助函数是你自己写的,还是给你的?
-
感谢您的及时回复。我在上面添加了我的问题。我写了辅助函数,但是函数签名给了我,我必须使用它。
-
你需要在递归调用之前和之后做一些事情首先你在向下打印,然后在向上打印。
-
但这不会破坏递归调用吗?因为如果我自己调用它,它会做所有这些事情。对不起,如果这没有意义。
标签: c function recursion definition