我在C#中有一个递归问题。
我的任务是打印这个:
1 2 3 4 5@ 10 8 6 4 2 1
我已成功印出:
1 2 3 4 5 @ 10 8 6 4 2 0
但是,我需要将0转换为1。
这是我的密码:
public static void Recursive(int a, int b)
{
if (a > b)
{
Console.WriteLine("@");
Console.WriteLine(a * 2 - 2);
}
else
{
Console.WriteLine(a);
Recursive(a + 1, b);
Console.WriteLine(a*2-2);
}
}发布于 2022-09-17 17:34:25
还不清楚“需要将0转换为1(同时打印)”与递归有什么关系,但一些基本条件应该是这样的--我会介绍一个助手方法,因为您似乎需要它3次:
static void PrintOneInstedOfZero(int v) => Console.WriteLine (v == 0 ? 1 : v);并相应地在所有2.5处使用它( Console.WriteLine(a*2-2);在代码中被重复两次,没有明显的原因,因此我将其计算为1.5个调用):
public static void Recursive(int a, int b)
{
if (a > b)
{
Console.WriteLine("@");
PrintOneInstedOfZero(a * 2 - 2);
}
else
{
PrintOneInstedOfZero(a);
Recursive(a + 1, b);
PrintOneInstedOfZero(a * 2 - 2);
}
}发布于 2022-09-17 17:51:36
我有两个变体要试验:
static void Recursive1(int level)
{
if (level < 6)
{
if (level > 0)
{
Console.Write($"{level} ");
}
Recursive1(level + 1);
if (level == 0)
{
Console.WriteLine("1 ");
}
else
{
Console.Write($"{2 * level} ");
}
}
else if (level == 6)
{
Console.Write("@ ");
}
}
static void Recursive2(int level)
{
if (level < 6)
{
Console.Write("12345@"[level] + " ");
Recursive2(level + 1);
Console.Write($"{(level == 0 ? 1 : 2*level)} ");
}
}第二个变体可能不是你应该交的东西。
发布于 2022-09-23 17:05:39
这是我的想法。输出供参考。
public static void Recursive(int a, int b)
{
if (a > b)
{
Console.Write("@ ");
Console.Write(a * 2 - 2);
}
else
{
Console.Write(a + " ");
Recursive(a + 1, b);
if (a > 1)
{
Console.Write(" ");
Console.Write(a * 2 - 2);
}
else
{
Console.Write(" ");
Console.Write(a);
}
}
}https://stackoverflow.com/questions/73756355
复制相似问题