首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# -递归级数

C# -递归级数
EN

Stack Overflow用户
提问于 2022-09-17 15:56:56
回答 3查看 84关注 0票数 -1

我在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。

这是我的密码:

代码语言:javascript
复制
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);
            }
        }
EN

回答 3

Stack Overflow用户

发布于 2022-09-17 17:34:25

还不清楚“需要将0转换为1(同时打印)”与递归有什么关系,但一些基本条件应该是这样的--我会介绍一个助手方法,因为您似乎需要它3次:

代码语言:javascript
复制
static void PrintOneInstedOfZero(int v) => Console.WriteLine (v == 0 ? 1 : v);

并相应地在所有2.5处使用它( Console.WriteLine(a*2-2);在代码中被重复两次,没有明显的原因,因此我将其计算为1.5个调用):

代码语言:javascript
复制
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);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2022-09-17 17:51:36

我有两个变体要试验:

代码语言:javascript
复制
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)} ");
    }
}

第二个变体可能不是你应该交的东西。

票数 0
EN

Stack Overflow用户

发布于 2022-09-23 17:05:39

这是我的想法。输出供参考。

代码语言:javascript
复制
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);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73756355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档