当前位置: 首页 > 知识库问答 >
问题:

按递归划分数组

公冶子琪
2023-03-14

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

>

不要忽略或添加第一个数组中的数字

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

所有3的重复数(而不是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个答案

宗政洋
2023-03-14

这里有一个递归的方法来看待这个函数。

  • 你从两个空的“组”和一个装满数字的袋子开始。
  • 在这过程中的每一步,你从袋子里抽出一个数字,试着把它放在第一组,看看结果如何,然后把它放在第二组,看看结果如何。
  • 你这样做,直到袋子空了或者你找到了解决方案。
  • 然而,有一点复杂。也就是说,一些数字“粘在一起”。所以每当你从袋子里拿出一个数字时,你必须检查其他一些数字是否和它粘在一起。如果是这样,你也会把它们从袋子里拿出来,像处理第一个数字一样处理它们。

遵循上述方法应该可以让您递归地解决这个问题。

 类似资料:
  • 问题 你想在一个函数中调用相同的函数。 解决方案 使用一个命名函数: ping = -> console.log "Pinged" setTimeout ping, 1000 若为未命名函数,则使用 @arguments.callee@: delay = 1000 setTimeout((-> console.log "Pinged" setTimeout arg

  • 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n 所以,fact(n)可以表示为n x fact(n-1),

  • 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n)=n!=1\times2\times3\times\cdot\cdot\cdot\times(n-1)\times n=(n-1)!\times n=fact(n-1)\times n

  • 我正在处理一个递归二分法/算法。我已经把我的递归放在else/else if语句中,不知道我是否错了。它也返回正确的根,而没有递归,但主要问题是用递归。

  • 表T表示树。每个记录都是一个节点,每个节点只有一个父节点。 该查询计算每个节点的每个分支的SUM()。 我一直在尝试使用替代的子查询分解语法来实现这个查询的相同结果。任何帮助都将不胜感激!

  • 本文向大家介绍C++ 中二分查找递归非递归实现并分析,包括了C++ 中二分查找递归非递归实现并分析的使用技巧和注意事项,需要的朋友参考一下 C++ 中二分查找递归非递归实现并分析 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高。因此较为受我们追捧。其实二分查找算法,是一个很经典的算法。但是呢,又容易写错。因为总是考虑不全边界问题。 用非递归简单分析一下,在编写过程中,如果编写的是以下的代