我已经开始练习一些 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 个整数和递归,就无法通过这种方法传递打印升星所需的信息。
但我仍然不太确定,因此提出了这个问题。