我实现了一个非常简单的递归方法,将两个数相乘在一起。我很难理解递归的基本知识。
有没有人能向我解释(如果可能的话,逐行解释)这段代码是如何工作的?我尤其感到困惑的是,基大小写被写为返回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=4
和m=3
。
我们对该方法的第一个调用是multiply(4,3)
。然后我们继续,基础条件是假的,所以我们跳过它。
然后我们进入这一部分:返回multiply(n,m-1)+n
。我们对同一个函数进行另一次调用。多个(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
本文向大家介绍什么是递归?用Java写一个简单的递归程序,包括了什么是递归?用Java写一个简单的递归程序的使用技巧和注意事项,需要的朋友参考一下 什么是递归?用Java写一个简单的递归程序 递归的定义 递归(recursion):以此类推是递归的基本思想,将规模大的问题转化为规模小的问题来解决。 递归的要素 自定义递归函数,并确定函数的基本功能 例如Java从键盘输入一个数,求输入这个数的阶乘。
问题内容: 我目前在理解和编写递归查询时遇到一些麻烦。我知道递归查询用于搜索信息层次结构,但是我还没有找到一个可以遍历层次结构的简单在线解决方案。例如,假设我有一个对家谱建模的关系: 如果我想编写一个遍历此家谱的递归查询,收集所有父母直到出生,我该如何处理? 提前致谢。 问题答案: 您可以使用子句。 在您的情况下,SQL可能类似于:
问题内容: (希望)对某些人来说,这是一个非常简单的问题。 我有一个来自mySQL数据库的递归菜单,现在我的主要问题是: 创建URL的最佳方法是什么?我希望输入每行的标题,例如/ eggs / milk / bacon /。鸡蛋处于0级,例如:鸡蛋0,牛奶1,培根2。关于如何动态输出此内容的任何想法? 对于“ cletus”所说的这个问题,我几乎要去做些评论:PHP / MySQL- 建立导航菜单
本文向大家介绍简单了解java数组传递方法,包括了简单了解java数组传递方法的使用技巧和注意事项,需要的朋友参考一下 Java 使用值传递(pass by value)的方式将实参传递给方法。传递基本数据类型变量的值与传递数组值会有很大的不同 对于基本数据类型参数,传递的是实参的值 对于数组类型参数,参数值是数组的引用,给方法传递的是这个引用。从语义上来讲,最好的描述就是参数传递的共享信息,即方
我正在努力将非平凡函数映射为尾递归。 就拿简单的玫瑰树来说 带地图 (更不用说绑定了) 使这种尾部递归似乎很痛苦,我已经看过了FSharpx之类的例子,但它们不是尾部递归的。我找到了这个 https://www.gresearch.co.uk/article/advanced-recursion-techniques-in-f/ 但是,从基于连续性的最后一个示例开始的飞跃似乎相当符合他们的示例(m
本文向大家介绍Java之递归求和的两种简单方法(推荐),包括了Java之递归求和的两种简单方法(推荐)的使用技巧和注意事项,需要的朋友参考一下 方法一: 方法二: 当然还有其它方法,如采用 for 循环、while 循环等,那就不属于递归了!这里就不做讨论了。 以上这篇Java之递归求和的两种简单方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。