java - 如何在java中跟踪方法从第一个方法调用到基本情况的递归?

标签 java recursion

考虑以下代码片段。

public static void main(String[] args){
   int[] arrayOfInts = {5, 7, 5, 6, 4, 2, 3, 8, 4, 5, 2, 1, 8};
   System.out.println("The result is: " + rangeSum2(arrayOfInts, 4, 7)
}

public static int rangeSum2(int[] array, int start, int end) 
{
    if (start == end)
        return array[start];
    else if (start > end)
        return 0;
    else
        return array[start] + rangeSum2(array, start + 1, end - 1) + array[end];
}

如何查看每个方法调用为开始和结束变量输出的内容以及每个方法调用返回的内容?
从索引4到索引7的总和的最终结果是17。
另外,当我传递 4 和 7 的 int 时,该方法是否考虑 4 和 7 还是数组的第 4 个和第 7 个索引值?

根据我的理解,我像这样跟踪每个方法调用: 第一个方法调用 开始: 4 结束:7 返回:4 + rangeSum2(数组, 5, 6) + 7
第二种方法调用 开始: 5 结束:6 返回 5 + rangeSum2(数组, 6, 5) + 6 ETC... 我只是无法知道该方法每次递归使用什么值。

最佳答案

第一次调用后,您对该方法使用以下递归:

rangeSum2(array, start + 1, end - 1),意思是:

调用 1:

start = 4, end = 7

通话 2:

start = 5, end = 6  because of rangeSum2(array, 4 + 1, 7 - 1)

调用 3:

start = 6, end = 5  because of rangeSum2(array, 5 + 1, 6 - 1)

最后,你会得到: 4 + 2 + 3 + 8 + 0

关于java - 如何在java中跟踪方法从第一个方法调用到基本情况的递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49483055/

相关文章:

java - 从头开始创建 .txt 文件

java - 如果键匹配,则为 HashMap 列表添加值

r - R 未使用可用堆栈大小,返回 "Error: node stack overflow"

java - 如何在java中使用递归函数获取父子关系

java - 骑士之旅回溯Java

java - 如何从 Do While 封闭开关中的 Integer ArrayList 返回平均值

java - 我如何通过反射(reflection)性地比较 POJO 的领域

python - 递归错误 : maximum recursion depth exceeded in comparison

c - 我的程序在递归函数中使用 realloc() 就崩溃了

java: ByteArrayOutputStream.toByteArray() 性能