我正在尝试解决递归的练习。这个练习是用C来解决的,但为了方便起见,我首先尝试用C#解决它(我更习惯的地方)。它说:
编写一个程序,其中用户必须输入一个正数n,这是2的幂(我认为必须排除2 ^ 0 = 1,即使它没有澄清这一点),然后在递归函数的帮助下打印一个特定的模式。
例如 n = 8 ,请注意中间线有 8 颗星:
* (7 spaces)
** (6 spaces)
* (6 spaces)
**** (4 spaces)
* (5 spaces)
** (4 spaces)
* (4 spaces)
******** (0 spaces)
* (3 spaces)
** (2 spaces)
* (2 spaces)
**** (0 spaces)
* (1 space)
** (0 spaces)
* (0 spaces)
n = 4 的示例:
* (3 spaces)
** (2 spaces)
* (2 spaces)
**** (0 spaces)
* (1 space)
** (0 spaces)
* (0 spaces)
我已经从希腊语翻译了这个练习,所以如果我的措辞有误,我提前很抱歉。我个人已经添加了每行必须具有的所需间距,以使您更容易。
我做了什么:
我发现了递归函数的结构,它是(我发布了我的程序的整个代码):
static void Main()
{
int n;
do
{
n = int.Parse(Console.ReadLine());
}
while (!IsPowerOf2(n)) ;
PrintRecursive(n);
}
static void PrintRecursive(int stars)
{
if (stars > 2)
{
PrintRecursive(stars / 2);
Console.WriteLine(new string(' ',0) + new string('*', stars));
PrintRecursive(stars / 2);
}
else
{
Console.WriteLine(new string(' ', 0) + "*");
Console.WriteLine(new string(' ', 0) + "**");
Console.WriteLine(new string(' ', 0) + "*");
}
}
static bool IsPowerOf2(int n)
{
return (n != 0) && ((n & (n - 1)) == 0);
}
这个递归函数为每个可接受的n产生正确的恒星序列(除了1,我坚持认为它必须被排除在外)。
我没有做什么:
我真的找不到一个公式来计算每个控制台所需的间距。WriteLine() 。为了获得模式的完全正确的格式,我必须找到一些东西来替换 String Class I 启动的实例中的 count 参数。
月关宝盒
相关分类