【问题标题】:Why does this function return 83 and not 5 when we call function(2)?为什么当我们调用函数(2)时这个函数返回 83 而不是 5?
【发布时间】:2022-01-16 03:25:48
【问题描述】:

当我通过输入 2 运行此函数时,我不明白为什么它返回 83 而不是 5,因为它应该在 else 语句中调用 function(1),然后应该执行 if 语句并且该函数应该返回 5。

public static int function(int y) {
    if (y == 1)
        return 5;
    
    function(y - 1);
    y = y + 1;
    
    return 83;
}

【问题讨论】:

  • 为什么你期望 5?它应该返回 83...

标签: java recursion


【解决方案1】:

返回 83 因为你没有使用function(y - 1);的返回值
要测试它,请尝试:

public static int function(int y) {
    if (y == 1)
        return 5;
    else {
        int returnedValue =  function(y - 1);
        System.out.println("un used returned value: "+returnedValue);
        y = y + 1;
        return 83;
    }
}

改为:

public static int function(int y) {
   if (y == 1)  return 5;
   /*else*/ 
   return function(y - 1); 
}

【讨论】:

  • 好的,我想我现在明白了,谢谢!
  • 小心,y < 1 这是无限递归
【解决方案2】:

输入:y = 2,

将处理其他情况。

function(y - 1);//nothing impact to y
y = y + 1;// y =3
return 83; // but finally return 83

你明白了吗?

【讨论】:

  • 但是在 else 语句中不会调用 function(1) 并导致返回 5?
  • 是的,它返回 5 并且结果没有分配给任何变量......并继续处理下面的代码......请注意,您应该考虑函数(1)与当前无关上下文。
  • 好的,谢谢!
  • 欢迎........
  • @manankansil 考虑up voting 或接受有用的答案
【解决方案3】:

由于您不返回function(y-1),因此该语句与使函数无效(对于该调用)一样好。

因此,一旦控件到达函数(y-1)并最终导致调用函数(1),您确实会得到 5,但它不会返回给驱动程序函数。相反,返回的是值 83。

【讨论】:

  • 有道理,谢谢!
  • @manankansil 考虑up voting 或接受有用的答案
【解决方案4】:

看看这个:

public static int function(int y) {
    if (y == 1)
        return 5;
    
    function(y - 1);   // you do not use return value
    y = y + 1;

    return 83;         // you always get this return
}

这意味着您可以将您的功能替换为:

public static int function(int y) {
    return 83;
}

看起来你想做某事。像这样:

public static int function(int y) {
    return y == 1 ? 5 : function(y - 1);
}

但要小心,因为对于y < 1,您将有一个无限递归 (StackOverflowError)。

【讨论】:

  • 我要补充一点,y 值不会影响结果。
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多