【问题标题】:How do you call a recursion (factorial) properly你如何正确地调用递归(阶乘)
【发布时间】:2018-04-08 12:40:48
【问题描述】:

我有一个带有递归的类来做阶乘。我的问题是如何正确调用它,因为我在尝试这样做时遇到了一堆错误。

这是我的阶乘类

public class Factorial
{
    public static double factorial_Recursion(int number)
    {
        if (number == 1)
            return 1;
        else
            return number * factorial_Recursion(number - 1);
    }
}

所以我的问题是如何设置递归运行的次数然后显示它。 (顺便说一下,我是 Windows 窗体)我对 C# 很陌生,这是我第一次使用递归。抱歉,如果它超级愚蠢,谢谢您的帮助!

【问题讨论】:

  • factorial_Recursion(10) 如果你想计算 10 的阶乘
  • 有什么问题?这看起来正确吗?
  • 我想通了,只是不知道如何正确调用它。我在想它比它更复杂谢谢大家。

标签: c# recursion


【解决方案1】:

我想你提到过你在 windows 中使用 c# 开发了这个。

只需在按钮单击事件中调用它,向表单添加标签(给它一个 id="lblResult")并添加一个按钮,双击它以添加一个单击事件,然后将标签的文本设置为以下函数调用的结果。

lblResult.Text = Factorial.factorial_Recursion(10).ToString();

【讨论】:

  • 这正是我所需要的。谢谢。
  • @ColeBrowne 如果此答案解决了您的问题,请单击绿色复选标记将其标记为正确。这样,其他人将来阅读本文时就会知道从哪里开始,并且 SO 的整体声誉经济将发挥应有的作用:)。谢谢
  • 谢谢大家,我知道怎么做。它只是让您等待一定的时间才能标记正确的答案!
【解决方案2】:

如何设置递归运行的次数然后显示 它

您已经这样做了:您将递归设置为运行 n 次,因为输入是正整数 n

【讨论】:

    【解决方案3】:
    public class Factorial
    {
        public static double factorial_Recursion(int number)
        {
            if (number == 1)
                return 1;
            else
                return number * factorial_Recursion(number - 1);
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Factorial.factorial_Recursion(10));
        }
    }
    

    给予

    或者清理一下

     public class MathStuff
     {
         public static double Factorial(int n) => n == 1? 1 : n * Factorial(n - 1);
     }
    
     class Program
     {
         static void Main(string[] args)
         {
             Console.WriteLine(MathStuff.Factorial(10));
         }
     }
    

    另外,根据你所拥有的,使用小于 1 的调用会溢出堆栈

    【讨论】:

      【解决方案4】:

      由于这是一个static 方法,因此您不必实例化该类并按原样调用它。

       Factorial.factorial_Recursion(5);
      

      example

      【讨论】:

        【解决方案5】:

        我相信这种方法很容易理解,而且对眼睛也很好。

                static void Main(string[] args)
                {
                    Console.WriteLine(Fact(4)); 
                }
        
                static int Fact(int n)
                {
                    if (n >= 1)
                    {
                        return n * Fact(n - 1);
        
                    }
                    else
                        return 1;
                } 
                                 //returns 24
        

        【讨论】:

        • 你的答案和之前的有什么不同?
        猜你喜欢
        • 2015-04-19
        • 1970-01-01
        • 1970-01-01
        • 2016-01-28
        • 1970-01-01
        • 2015-03-26
        • 2019-08-06
        • 2019-07-24
        • 1970-01-01
        相关资源
        最近更新 更多