【发布时间】:2017-11-20 20:45:41
【问题描述】:
为什么我在输出中得到一个额外的 1 * 1 并且它有点倒退?有点递归的初学者,希望得到详细的答案。
class Program
{
public static long Factorial(int n)
{
if (n == 0)
return 1;
Console.WriteLine("{0} * {1}", n, Factorial(n - 1));
return n * Factorial(n - 1);
}
static void Main(string[] args)
{
long a = 0;
a = Factorial(3);
Console.WriteLine(a);
}
}
输出
1 * 1
2 * 1
1 * 1
3 * 2
1 * 1
2 * 1
1 * 1
6
【问题讨论】:
-
我投票结束这个问题作为题外话,因为调试帮助:这段代码是如何工作的?
-
@danihp 这基本上是某人 (@yosu) 犯的错误,也可能发生在其他人身上。所以这甚至可以帮助其他人,有一个类似的问题。它并没有那么广泛,它只是调试帮助,它是一个关于递归的相当紧凑的问题。
-
@MetaColon 代码有很大的错误,因为这个输出没有意义。 OP 要求忽略此错误。这是家庭作业。 OP应该自己做。它们是双重递归,应该是简单的。
-
@danihp 我想一开始就与递归混淆是很正常的,所以寻求帮助也很正常。而且我看不到 OP 在哪里要求忽略错误?