因子逻辑如何运作?

时间:2013-07-15 05:11:02

标签: c# algorithm

我有一个代码片段来查找给定值的阶乘数。我试图通过调试代码片段找出代码流。但我仍然对流程感到困惑。下面是我的代码片段,任何人都可以帮助我理解这个流程吗?

static void Main()
{
   long value = factorial(5);
}

static long factorial(long num)
{
   if (num <= 1)
        return 1;
   else
        return num * factorial(num - 1);
} 

5 个答案:

答案 0 :(得分:8)

它被称为recursion,它是计算机科学中的一个基本概念。阶乘函数是递归的典型示例,因为它通常以递归方式定义。

factorial(0) := 1
factorial(1) := 1
factorial(n) := n * factorial(n - 1)

因此,对于任何数字0或1,阶乘被定义为常数值,并且对于任何数字n> 1。如图1所示,可以通过递归相乘来计算。程序将继续乘以n,n-1,n-2,......直到达到1。

答案 1 :(得分:2)

这是一个递归函数,这意味着它使用不同的输入调用自身。它将继续自我调用,直到它达到一个通常被称为“基础”情况的停止点。当达到基本情况时,所有函数调用都将产生一个整数返回值,这意味着可以在对初始调用进行计算返回值时进行乘法运算。一开始就是一个奇怪的事情,但这是一个非常有用的概念。

结束时:Factorial通常用于解释递归的工作原理,但它也是您不应该使用它时最明显的情况。使用for循环可以更好地解决因子。 递归的最常见用例是当您不知道必须重复多少次过程时。 N因子不是一个很好的候选者,因为它已经确定你必须做n次。

答案 2 :(得分:1)

该方法是递归的,这意味着它自己调用。每次连续调用时,它将当前数字递减1.例如:5:5 * 4 * 3 * 2 * 1 = 120的因子。

因子的工作方式如下:

Original number: 5
(5)*(5-1)*(5-2)*(5-3)*(5-4)

一旦当前数字为1或更小(0),该方法将前一个值乘以1.如果最初传递给方法的数字是10,这也很有用。 0!1!都是1。

答案 3 :(得分:1)

Recursive Methods in c#有关同一主题的有趣读物。

A递归通常,有两个规格:
- &GT;递归方法调用自身很多次,直到满意为止 - &GT;递归方法具有参数,并使用新参数值调用自身。

Factorial by recursion Wiki

答案 4 :(得分:1)

递归是函数调用自身的时候。 递归函数允许您将复杂问题划分为相同的单个简单案例,可以轻松处理。这也是一种众所周知的计算机编程技术:分而治之。