public static void main (String[] args)
{
System.out.println(factorial(5));
}
public int factorial(int n)
{
if(n <= 1){
return 1;
}
else{
return n * factorial(n - 1);
}
}
我直接在这里写了上面的内容,所以可能无法编译,但我认为可以。
任何人都可以简单地解释一下它是如何工作的,即它是如何存储的吗?它首先计算 5 * (5-1),然后计算到 4 * (4-1),然后计算 3 * (3-1)......直到计算到 1,这只会返回 1,对吧?抱歉这么粗略,我只是有兴趣了解如何
这完全有效
thanks
但当它解决时 - 它会得到各个阶段的值
5*(5-1)
4*(4-1)
...
...
...
这些是如何存储然后检索回来的,还是我丢失了一些东西?
想象一下你是计算机,有人递给你一张纸
factorial(3)
写在上面。然后执行该过程,查看参数。因为它 > 1,所以你写
factorial(2)
在另一张纸上“把它交给自己”,等到你得到那张纸的答案后再继续。
您再次执行该过程。因为 2 仍然 > 1 你写
factorial(1)
在另一张纸上写下来,然后交给自己,等到得到这张纸的答案后再继续。
您再次执行该过程。这次输入为 1,因此您采用第一个分支并返回 1。处理 Factorial(2) 的调用现在有了答案,因此它将 2 乘以该答案 (1) 并返回。现在,处理 Factorial(3) 的调用得到其答案 (2) 并将其乘以 3,得到 6。然后它将该答案返回给开始整个操作的人。
如果您想象在工作时将纸片堆放在您面前,那么这就是计算机内存中“堆栈”的可视化。每个递归调用将参数(和任何临时变量)存储在自己的一张纸(堆栈框架)上,字面上排列为下推堆栈,就像纸一样,一个在另一个之上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)