return 来自 java 递归方法的值 when return 在数学表达式中

return value from recursive method in java when returning math expresion

public static void main(String[] args) {
    
    System.out.println(f(3));
    
}//end main

public static int f(int i) {
    if(i<=1) {
        return 1;
    }
    else {
        return(2+f(i-1));
    }
}

当我将 3 作为参数时,这个函数调用 returns 5,但我不明白为什么

你输入 3,它减去 1 等于 2,然后进行递归,即 2 减 1 等于 1。最后它加上 2 + 2 + 1,等于 5。

下面是一个可能有助于解释操作顺序的片段。 JavaScript里面写的,但是递归是一样的

您对 f(3) 的调用必须先计算 f(2),然后才能 return 一个值。

反过来,f(2) 必须先计算 f(1),然后才能 return 一个值。

f(1) 是基本情况,指定等于 1.

一旦f(2)知道f(1) = 1,它就可以完成自己的计算并且return (2 + 1) = 3.

一旦f(3)知道f(2) = 3,它就可以完成自己的计算,return (2 + 3) = 5就是你的结果。

function f(i) {
  console.log(`f(${i}) called.`);
  
  if (i <= 1) {
    console.log(`f(${i}) returned 1.`);
    return 1;
  }
  
  console.log(`Getting value of f(${i - 1}) because i = ${i} which is > 1.`);
  let r = f(i - 1);
  
  console.log(`f(${i}) used f(${i - 1}) = ${r} to calculate (2 + ${r}).`);
  r = (2 + r);
  
  console.log(`f(${i}) returned ${r}.`);
  return r;
}

console.log(`Result: ${f(3)}.`);

评估过程如下:

f(3)
2 + f(2)
2 + (2 + f(1))
2 + (2 + 1)
2 + 3
5