gpt4 book ai didi

c - 在 C 中以困难的方式打印星号

转载 作者:太空狗 更新时间:2023-10-29 15:24:21 26 4
gpt4 key购买 nike

我已经开始练习一些 C 并发现这个很好的练习,我必须通过输入打印一个三角形。对于输入 6,它将打印

*
**
***
****
*****
******
*****
****
***
**
*

现在,看着它我想,嗯,这不是一项艰巨的任务。所以我决定尝试使用递归编写它,没有循环,只有 2 个变量。该函数应如下所示:

void PrintTriangle(int iMainNumber, int iCurrNumber)
{
//Logic goes here
}

几个小时后我意识到这比我想象的要难得多,因为我需要传递足够的信息让函数能够“记住”它应该打印多少三角形。

所以现在我决定问问你这是否可能。

(记住,没有循环,没有其他函数,只有递归)。

编辑:这不是家庭作业,这纯粹是出于好奇。但是我可能无法为您验证。我已经设法完成了一半

void PrintTriangle(int iMainNumber, int iCurrNumber)
{
if (iMainNumber == 0)
{
printf("\r\n");
}
else if (iMainNumber == iCurrNumber)
{
printf("\r\n");
PrintTriangle(iMainNumber - 1, 0);
}
else
{
printf("%s", MYCHAR);
PrintTriangle(iMainNumber, iCurrNumber + 1);
}
}

我在尝试创建相反的函数时遇到了困难,我相信如果我能做到这一点,我将能够使用 iMainNumber 和 iCurrNumber 是正数或负数这一事实来导航函数流。

换句话说,当参数为负时,我将在输入减一的长度上打印一个下降的星号,而当参数为正时,我将在输入的长度上打印一个上升的星号。

我考虑过使用标志,但不是用 2 个整数。

也许如果我添加另一个标志并有 2 个整数和一个标志,那么我可以解决它,但正如我所说,我试图将自己限制为 2 个整数。

我开始想到的是,如果不使用超过 2 个整数和递归,就无法通过这种方法传递打印上升星所需的信息。

但我仍然不太确定,因此才有这个问题。

最佳答案

我想到了:

void PrintTriangle(int size, int indent)
{
switch(size) {
case 0:
if (indent > 1) PrintTriangle(size, indent-1);
putchar('*');
break;
case 1:
PrintTriangle(size-1, indent+1);
putchar('\n');
break;
default:
PrintTriangle(1, indent);
PrintTriangle(size-1, indent+1);
PrintTriangle(1, indent);
break; }
}

int main()
{
PrintTriangle(6, 0);
return 0;
}

作为快速的第一次尝试。似乎可以完成这项工作。

size 是要打印的三角形的大小,indent 是三角形每一行之前要打印的额外星星的数量。 size==0 表示只打印 indent 星号,不换行(用于打印三角形前的缩进)

如果你想要更紧凑的东西,你可以将其重写为:

void PrintTriangle(int size, int indent)
{
if (size <= 0) {
if (indent > 1) PrintTriangle(size, indent-1);
putchar('*');
} else {
if (size > 1) PrintTriangle(1, indent);
PrintTriangle(size-1, indent+1);
if (size > 1) PrintTriangle(1, indent);
else putchar('\n'); }
}

关于c - 在 C 中以困难的方式打印星号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19368438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com