你如何正确地调用递归(阶乘)
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基础——递归及其经典例题(阶乘斐波那契数列汉诺塔)