繁体   English   中英

Java 简单递归解释

[英]Java simple recursion explanation

我正在实现一个非常简单的递归方法来将两个数字相乘。 我很难理解递归的基础知识。

有人能向我解释(如果可能的话,逐行)这段代码是如何工作的? 我对将基本情况写入返回 0 而实际上返回实际乘法而感到特别困惑。

    public static int multiply(int n, int m) {
    if (m == 0) {
        return 0; //Base case
    }
    return multiply(n, m - 1) + n; //Recursive Case - Decrements m, while adding n
}

谢谢你的帮助

我会尽量让这个答案对初学者友好。 首先,我将回答您问题的这一部分:

我对将基本情况写入返回 0 而实际上返回实际乘法而感到特别困惑。

在基本情况下返回的值取决于您实现算法的方式 这里为了计算n*m ,我们将这个乘法扩展到加法。 举几个例子可以更清楚地说明这一点。

2*3 = 2 + 2 + 2 + 0
4*1 = 4 + 0
5*5 = 5 + 5 + 5 + 5 + 5 + 0
n*m = n + n + n + ... + (m times) + 0

这就是我们在基本情况下返回 0 的原因,我们必须停止递归而不对结果进行任何更改,并且只有添加 0 才有可能


这是这个程序的工作:

public static int multiply(int n, int m) {
if (m == 0) {
    return 0; //Base case
}
return multiply(n, m - 1) + n;

让我们取n = 4m = 3

我们对该方法的第一次调用是multiply(4, 3) 然后我们继续进行,基本条件为假,所以我们跳过它。

然后我们进入这部分: return multiply(n, m - 1) + n 我们再次调用相同的 function。 multiple(4, 2) 我们再次跳过基本情况。 这是一张表:

multiply(4, 3) -> return multiply (4, 2) + 4
multiple(4, 2) -> return multiply (4, 1) + 4
multiple(4, 1) -> return multiply (4, 0) + 4
multiple(4, 0) -> 0

在替换我们得到的返回值时,

multiple(4, 3) -> return 0 + 4 + 4 + 4 
multiple(4, 2) -> return 0 + 4 + 4
multiple(4, 1) -> return 0 + 4
multiple(4, 0) -> return 0

如果我们的第一个调用是multiply(n, m) ,那么最后的返回值是:

multiply (n, m) -> return 0 + n + n + n + ... + (m times)

我希望我对你有所帮助。 尝试自己构建一个类似的关系,你会更好地理解它。 这是有关递归的进一步解释的链接:

https://www.geeksforgeeks.org/recursion

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM