gpt4 book ai didi

java - 理解基本递归

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:58:30 24 4
gpt4 key购买 nike

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。处理阶乘 (2) 的调用现在有一个答案,因此它将 2 乘以该答案 (1) 并返回。现在处理 factorial(3) 的调用得到它的答案 (2) 并将它乘以 3,得到 6。然后它将该答案返回给开始整个操作的人。

如果您想象自己在工作时将纸片堆放在您面前,这就是计算机内存中“堆栈”的可视化。每个递归调用都将参数(和任何临时变量)存储在它自己的一张纸(堆栈框架)上,字面上排列为下推堆栈,就像纸张一样,一个在另一个之上。

关于java - 理解基本递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1949454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com