你如何正确地调用递归(阶乘)

Posted

技术标签:

【中文标题】你如何正确地调用递归(阶乘)【英文标题】: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 的阶乘 有什么问题?这看起来正确吗? 我想通了,只是不知道如何正确调用它。我在想它比它更复杂谢谢大家。 【参考方案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

【讨论】:

你的答案和之前的有什么不同?

以上是关于你如何正确地调用递归(阶乘)的主要内容,如果未能解决你的问题,请参考以下文章

Python基础——递归及其经典例题(阶乘斐波那契数列汉诺塔)

Python基础——递归及其经典例题(阶乘斐波那契数列汉诺塔)

递归算法详细分析

汇编程序 - 2 (递归调用程序 -- 阶乘)

Python3基础 用 函数递归求解 一个数字的阶乘

使用参数递归的数字阶乘(如参数列表中的函数调用)