根据递归划分的数组

时间:2018-05-29 13:09:06

标签: java recursion boolean

编写一个名为mySplit的函数,它接受一个int数组,并调用递归引用函数。功能 MySplit应该检查数组中的数字是否可以分为2组,

  1. 每组中的数字总和将相同。

  2. 请勿在第一个数组中忽略或添加数字

  3. 所有5的倍数必须在同一组中。

  4. 所有重复3的数字(而不是5的倍数)必须在第二组中。

  5. 我开始编写代码,但我正在寻找 一些不同的想法。 一切都应该写在递归函数中,布尔函数应该只返回true或false

    示例:

    mySplit ([1, 1]) → true
    
    mySplit ([1, 1, 1]) → false
    
    mySplit ([2, 4, 2]) → true
    
    mySplit ([5, 21, 8, 15, 7]) → true
    
    mySplit ([15, 10, 5]) → false
    
    mySplit ([15, 8, 7]) → true
    

    我的代码:

     public static boolean mySplit(int[] nums)
            {
    
                int []arr1=null;
                int []arr2 = null;  
                int index_1=0;int index_2=0;
    
                for (int i = 0; i < nums.length; i++) 
                {
                    if(nums[i]%5==0)
                    {
                        arr1[index_1]+=nums[i];
                        index_1++;
                    }
                    if(nums[i]%3==0 && (!(nums[i]%5==0)))
                    {
                        arr2[index_2]=nums[i];
                        index_2++;
                    }
    
                }
    
            }
            public static int myRecur(int[] nums,int[] nums1,int quelbdika)
            {
    
                if(quelbdika>4)
                    return 0;
                boolean flag=true;
    
                if(quelbdika==1) 
                {
                    int somm1=0,somm2=0;
                    for (int i = 0; i < nums1.length; i++)
                    {
                        somm2+=nums1[i];
                    }
                    for (int i = 0; i < nums.length; i++) 
                    {
                        somm1+=nums[i];
                    }
                    if(somm1!=somm2)
                        flag=false;
                }
    
                if(flag)
                    return 1+myRecur(nums,nums1,quelbdika+1);
                else {
                    return 0+myRecur(nums,nums1,quelbdika+1);
                }
            }
        }
    

1 个答案:

答案 0 :(得分:0)

这是查看此功能的递归方式。

  • 你从两个空的&#34;组开始#34;还有一个装满号码的袋子。
  • 在整个过程中的每一步,你都会从包中取出一个数字,然后尝试将它放在第一组中,看看它是如何工作的,然后将它放在第二组中,看看它是如何工作的。< / LI>
  • 这样做直到行李空了或找到解决方案。
  • 但是,有一点复杂。也就是说,有些数字会被粘在一起。&#34;因此,无论何时从包中取出一个数字,您都必须检查是否有其他数字与它粘在一起。如果是这样的话,你也可以将它们从袋子里取出来,和第一个号码一样。

遵循上述方法应该允许您递归地解决这个问题。