转载

java – 理解基本递归

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

原文  https://codeday.me/bug/20190111/508799.html
正文到此结束
Loading...