java - 解释替代 For 循环的递归方法中的行为
问题描述
这是我调试的一段代码,但我看不到它是如何工作的:
int[] miArray = { 1, 2, 3, 4, 5 };
System.out.println(arraySum2(miArray, 0));
public static int arraySum2(final int[] array, final int start) {
if (start >= array.length) {
return 0;
} else {
return array[start] + arraySum2(array, start + 1);
}
}
从 0 到 5 的起始值运行 else,但是当达到 5 时返回而不是返回 0,它开始通过 else 并添加数字,并且 start var 开始减少。为什么?它应该像它所说的那样返回 0 ,对吗?
是的,它应该这样做,但我不明白它是如何工作的,我们将不胜感激。
解决方案
鉴于这array
是{ 1, 2, 3, 4, 5 }
:
arraySum2(array, 0)
返回array[0] + arraySum(array, 1)
arraySum2(array, 1)
返回array[1] + arraySum(array, 2)
arraySum2(array, 2)
返回array[2] + arraySum(array, 3)
arraySum2(array, 3)
返回array[3] + arraySum(array, 4)
arraySum2(array, 4)
返回array[4] + arraySum(array, 5)
arraySum2(array, 5)
返回0
。
好的。所以现在知道了arraySum2(array, 5)
计算结果,我们可以计算出arraySum2(array, 4)
返回值,等等:
arraySum2(array, 5)
是0
arraySum2(array, 4)
也会如此array[4] + 0 == 5 + 0 == 5
arraySum2(array, 3)
也会如此array[3] + 5 == 4 + 5 == 9
arraySum2(array, 2)
也会如此array[2] + 9 == 3 + 9 == 12
arraySum2(array, 1)
也会如此array[1] + 12 == 2 + 12 == 14
arraySum2(array, 0)
也会如此array[0] + 14 == 1 + 14 == 15
推荐阅读
- github - GitHub Actions:如何根据部署步骤输出动态设置环境 url?
- kubernetes - 如果我有一个 PVC 在所有 statefulset 副本之间共享相同的卷,是否存在任何技术问题?
- c# - JVM 的 JMC+JFR 是否有 C#/.NET 等效项,用于在生产中进行连续分析?
- c# - foreach 循环中的 Component.InvokeAsync 不起作用
- azure - 部署 Azure 容器而不运行它们
- maven - Jenkins maven projet 构建在测试期间在 fork 上失败
- javascript - 无法设置未定义的属性 - AuthLogin JS
- javascript - TypeError: req.flash is not a function -- (NodeJs) (connect-flash) -- 我无法打开页面
- python - 在 Django 的 TestCase 中测试并发客户端
- python - 一个基本的八位数字符串到八位二进制数