为了账号安全,请及时绑定邮箱和手机立即绑定

递归函数中的文本间距,用于打印星形图案

递归函数中的文本间距,用于打印星形图案

C#
猛跑小猪 2022-08-20 17:41:02
我正在尝试解决递归的练习。这个练习是用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 参数。
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

我想,你要找的就是这个。用你的两个处理能力。


    static void Main(string[] args)

    {

        PrintStars(8, 0, 0);

    }


    static void PrintStars(int stars, int prefix, int suffix)

    {

        if(stars == 1)

        {

            PrintStarsToConsole(stars, prefix, suffix);

            return;

        }

        var halfStars = stars >> 1;

        PrintStars(halfStars, prefix + halfStars, suffix); // for n = 4: __**

        PrintStarsToConsole(stars, prefix, suffix);        // for n = 4: ****

        PrintStars(halfStars, prefix, suffix + halfStars); // for n = 4: **__

    }


    static void PrintStarsToConsole(int stars, int prefix, int suffix)

    {

        Console.Write(new string(' ', prefix));

        Console.Write(new string('*', stars));

        Console.Write(new string(' ', suffix));

        Console.WriteLine();

    }


查看完整回答
反对 回复 2022-08-20
  • 1 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信