【问题标题】:return value from recursive method in java when returning math expresion返回数学表达式时从java中的递归方法返回值
【发布时间】:2021-08-13 22:46:16
【问题描述】:
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 作为参数时,此函数调用返回 5,但我不知道为什么

【问题讨论】:

  • 这是一个递归函数。 f(3) 返回一个包含 f(2) 的值,该值返回一个包含 f(1) 的值。
  • 所以基本上它返回(2 + (2 + (1)))(描述对f()的调用的段落)。

标签: java recursion methods return expression


【解决方案1】:

这是一个可能有助于解释操作顺序的 sn-p。它是用 JavaScript 编写的,但递归是一样的。

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

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

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

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

一旦f(3)知道f(2) = 3,它就可以完成自己的计算并返回(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)}.`);

【讨论】:

  • 感谢所有示例解释它真的帮了我很多
【解决方案2】:

你把 3 减去 1 等于 2 然后递归 2 减去 1 就是 1。最后它加上 2 + 2 + 1 等于 5。

【讨论】:

  • 非常感谢它真的很有帮助,我很感激
【解决方案3】:

评估过程如下:

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

【讨论】:

  • 感谢您的最佳解释方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 2012-04-21
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
相关资源
最近更新 更多