我是递归的新手,我很难理解这个递归阶乘函数是如何计算的。
当我尝试在脑海中运行代码时,这就是我想象它的方式:
If number = 4,
1st return: 4 x 3
2nd return: 3 x 2
3rd return: 2 x 1
所以在我看来它是 (4 x 3) * (3 x 2) * (2 x 1) 但显然正确的返回应该是 4 X 3 X 2 X 1。我希望能够理解它是如何得到 4 X 3 X 2 X 1 的。
public static long factorial(long number) {
if (number <= 1)
return 1;
else
{
System.out.println(number + " x " + (number-1) );
return number * factorial(number - 1);
}
}
如有任何帮助和解释,我们将不胜感激。
最佳答案
您的可视化应该是:
If number = 4,
1st return: 4 x (2nd return)
2nd return: 3 x (3rd return)
3rd return: 2 x (4th return)
4th return: 1
然后如预期的那样简化为 4 x 3 x 2 x 1。
基本上,你需要区分“返回值x”和“返回递归的结果,传入值x”。
关于java - 无法理解递归阶乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36099515/