首页 > 解决方案 > 解释替代 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 ,对吗?

是的,它应该这样做,但我不明白它是如何工作的,我们将不胜感激。

标签: javafunctional-programming

解决方案


鉴于这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

推荐阅读