【问题标题】:Why does the recursion goes to else block instead of if?为什么递归转到 else 块而不是 if?
【发布时间】:2021-07-15 02:55:10
【问题描述】:
class myclass {
   static int fun(int a[],int n){
      int x;

      if(n == 1){
        return a[0];
      }
      else{
           x = fun(a, n-1);

          if(x > a[n-1])
              return x;
          else
             return a[n-1];
      }
}
 public static void main(String[] args){
     int arr[] = {12, 10, 30, 50, 100};
     System.out.println(fun(arr, 5));}
}

为什么输出是 100 而不是 12 。我不明白为什么当 n 的值为 1 时最后一次递归调用,它会阻塞 else 而不是 if 。

【问题讨论】:

  • 如果你在逻辑上缩进你的代码,那么任何人都更有可能弄清楚它应该做什么。
  • 这位先生是新人,为什么有人要投票给他,这似乎没有必要。 SO 说他们想让这个地方对新来的人更友好,所以请保持友善或至少有建设性。

标签: java recursion methods


【解决方案1】:

这是因为你在最后返回到同一个函数的前一个实例,因此你的方法调用和返回看起来像这样(每一级缩进都是一个函数调用和它的返回)。如果您知道如何使用调试器,逐步检查您的代码并在执行过程中查看并绘制此图,这将有助于您在脑海中可视化递归调用和每次返回的值。

fun(a[],5) 
 |   fun(a[],4) 
 |   |   fun(a[],3)
 |   |   |  fun(a[],2)
 |   |   |   |  fun(a[],1)
 |   |   |   |  return 12
 |   |   |   return 12
 |   |   return 30
 |   return 50
 return 100

【讨论】:

  • 我觉得很好,你觉得有什么问题?
  • 哦,我看到的是两个 12 而不是 10,我想知道这是不是故意的。
【解决方案2】:

这里详细说明为什么结果是 100

public class myclass {
 static int fun(int a[],int n)
{
 int x;
 if(n == 1)
{
 return a[0];   // Step (2) --> return x = 12, now again n = 5 then continue on line        
}
 else
{
 x = fun(a, n-1); // Step (1) --> this line is same as x = fun(a, 1)
 if(x > a[n-1])     // Step (3) --> at this point n = 5 again and x = 12 while a[4] = 100 which is not less than x, statement 12 > 100 is false, move on to else block
 return x;
 else
 return a[n-1];  // Step (4) --> return a[4] which is 100 as see above
}
}
 public static void main(String[] args)
{
 int arr[] = {12, 10, 30, 50, 100};
 System.out.println(fun(arr, arr.length));}
}

希望您能理解递归示例中缺少的内容!

【讨论】:

    【解决方案3】:
    1. N=1 , x= 12 , 12 > a[0] (12) ---> 返回 a[1-1] = 12
    2. N=2。 x=12 , 12 > a[1] (10) --> 返回 x = 12;
    3. N=3。 x=12, 12> a[2] (30) --> 返回 a[3-1] = 30
    4. N =4 x =30, 30 > a[3] (50) --> 返回 a[4-1] = 50
    5. N=5 x =50 , 50 > a[4] (50) ---> 返回 a[5-1] = 100

    【讨论】:

      【解决方案4】:

      这是因为您在数组中寻找 maximum。将 if(x > a[n-1]) 更改为 if(x < a[n-1]) 将使您的程序为给定的输入返回 10。

      【讨论】:

      • 考虑到一年中的时间,三分之二的时间是编程的第二个学期,我敢打赌他是一名学习递归的学生,你可能已经给了他作业的答案。
      猜你喜欢
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      相关资源
      最近更新 更多