【问题标题】:How to exit from recursive function call如何退出递归函数调用
【发布时间】:2021-11-18 04:23:28
【问题描述】:

问题陈述:在数组中查找缺失的数字 给你一个从 1 到 n 的正数数组,这样从 1 到 n 的所有数字都存在,除了一个数字 x。你必须找到x。输入数组未排序。查看下面的数组并在检查解决方案之前尝试一下。

3,7,1,2,8,4,5 n = 8 缺少数字 = 6

我尝试了我的解决方案,但没有运气。基本上,我不确定如何退出递归函数调用

{
    public static void main(String[] args)
    {
        int[] array={3,7,1,2,8,4,5};
        int i=1;
        int missingItem=array[0]+1;
        System.out.println(checkMissingItem(array,i,missingItem));
    }

    public static int checkMissingItem(int [] array,int j,int mitem)
    {
      //  System.out.println(array.length);
        for(int x=0;x< array.length;x++)
        {   if(mitem>array.length)
        {
            mitem=array[j]+1;
            j=j+1;
            checkMissingItem(array,j,mitem);
        }
            if(mitem==array[x])
            {
              mitem=array[j]+1;
              j=j+1;
                if(j==array.length)
                {
                    return mitem;
                }else
              checkMissingItem(array,j,mitem);
            }


        }
 return mitem;
    }
}```

【问题讨论】:

  • 你为什么不排序?
  • 另一种方法:前n个自然数之和为n*(n+1)/2。你可以从这个预期的总和中减去实际的总和,得到缺失的数字。
  • 为什么要使用递归来解决这个问题?您希望它如何提供帮助?用您自己的话来说,代码是如何一步一步地工作的?

标签: java arrays recursion search review


【解决方案1】:

给定:


  • 大小为 n 的数组 A
  • 数组元素是从 1 到 n 的序列,总是从 1 开始
  • 总是只缺少一个数字X

然后:


expectedSum = n * ( n + 1 ) / 2

expectedSum = sum(A) + X

=> X = expectedSum - sum(A)

示例:


A = [ 2 , 7 , 1 , 4 , 5 , 3 , 8 ]

expectedSum = 8 * ( 8 + 1 ) / 2

=> expectedSum = 8 * 9 / 2

=> expectedSum = 72 / 2

=> expectedSum = 36

X = 36 - sum(A)

=> X = 36 - ( 2 + 7 + 1 + 4 + 5 + 3 + 8 )

=> X = 36 - 30

=> X = 6

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 2020-04-28
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 2016-05-26
    相关资源
    最近更新 更多