我有一个代码片段来查找给定值的阶乘数。我试图通过调试代码片段找出代码流。但我仍然对流程感到困惑。下面是我的代码片段,任何人都可以帮助我理解这个流程吗?
static void Main()
{
long value = factorial(5);
}
static long factorial(long num)
{
if (num <= 1)
return 1;
else
return num * factorial(num - 1);
}
答案 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.如果最初传递给方法的数字是1
或0
,这也很有用。 0!
和1!
都是1。
答案 3 :(得分:1)
Recursive Methods in c#有关同一主题的有趣读物。
A递归通常,有两个规格:
- &GT;递归方法调用自身很多次,直到满意为止
- &GT;递归方法具有参数,并使用新参数值调用自身。
答案 4 :(得分:1)
递归是函数调用自身的时候。 递归函数允许您将复杂问题划分为相同的单个简单案例,可以轻松处理。这也是一种众所周知的计算机编程技术:分而治之。