递归多个数据相加的返回语句怎么理解

System.out.println(getFactorialRecursion(12));

public static int getFactorialRecursion(int month){
    if(month == 1 ||month == 2){
        return 1;
    }
    return getFactorialRecursion(month - 1) + getFactorialRecursion(month - 2);
}

请问 return getFactorialRecursion(month - 1) + getFactorialRecursion(month - 2);怎么理解呀
是每次return getFactorialRecursion(month - 1)就加载方法,还是return getFactorialRecursion(month - 1) + getFactorialRecursion(month - 2);都加载完了再加载方法?

每次调用方法,都把它压入栈,直到遇到递归结束返回。按运算顺序,从左往右依次入栈。方法调用返回,后进的先出栈,依次计算并返回。你可以在这个方法里打个断点,按照我下面给出的示例代入了解下:

  • 比如你输入 month = 4 ;
  • 首先进入 getFactorialRecursion(4) , getFactorialRecursion(4)压入栈; 进入里面 getFactorialRecursion(3) 入栈;
  • 然后进入 getFactorialRecursion(3), sub_getFactorialRecursion(2) 压入栈,然后 getFactorialRecursion(1) 压入栈;
  • 然后 getFactorialRecursion(4)中 getFactorialRecursion(2) 入栈;

  • 现在 出栈计算 getFactorialRecursion(2) 出栈计算 返回 1;
  • getFactorialRecursion(1),返回 1; sub_getFactorialRecursion(2) 返回 1;
  • getFactorialRecursion(3) 出栈计算 返回 1+1 = 2;
  • 最后 getFactorialRecursion(4) 出栈计算,就返回 2 + 1 = 3, 最后输出 3;

先getFactori(month-1)一直递归到return 1 然后执行getFactori(month-2)一直递归到return 1 然后想加 。每次递归都是样执行。

把问题分解为小问题,在能够解决的时候返回实际值

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^