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?抱歉这么粗略我只想知道如何
这完全有效
谢谢
但随着它的运作 – 它获得了各个阶段的价值
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.然后它将该答案返回给开始整个操作的人.
如果你想象你在工作时将纸片放在你面前的堆栈中,那就是计算机内存中“堆栈”的可视化.每个递归调用将参数(和任何临时变量)存储在它自己的纸张(堆栈框架)上,就像纸张一样排列为下推堆栈,一个在另一个上面.
翻译自:https://stackoverflow.com/questions/1949454/understanding-basic-recursion