首页 文章

使用递归选择数组的奇数/偶数元素

提问于
浏览
0

我正在做一些编程功课,有点迷失 . 该项目是选择listarray的偶数/奇数元素并存储在另一个数组中 . 它不是每个元素中的偶数,而是元素本身,因此如果数组具有值“1,2,5,7,9”并返回偶数元素,则它将给出“1,5,9” . 还必须使用递归 . 有人能给我一个起点或一些建议 . 虽然从2个元素开始并采用第2个元素然后从中构建,但不知道它将如何在第2个传递中添加

public static ArrayList<Integer> even(ArrayList<Integer> list)
 ArrayList<Integer> evenlist = ListMethods.deepClone(tList);//make copy of list
 if (evenlist.size()<=1)    // The list is empty or has one element
 {
//        return null;// Return the list as is
 }

if 
(evenlist.size()==2)
{
 //return right element
 //call method again
 //add to list
}

3 回答

  • 1

    这听起来类似于我刚刚完成的作业,所以如果它(并且你在我的 class !),我不会告诉你使用我们没有涉及的任何术语,因为我知道它可能是令人生畏的试图发现实用的新东西(超出我们的要求) .

    首先,设置退出条件 . 正如您已经说过的那样,您必须从现有的ArrayList中创建一个新的ArrayList . 您将从现有ArrayList中删除项目,存储偶数(或奇数)索引的整数,直到列表为空 .

    所以你的退出条件是:

    if (evenList is Empty)
        return evenList;
    

    然后,按照自己的方式完成各个步骤 . 我建议确定你开始使用的数组是否有一个奇数步数,如下所示:

    if (evenList has Even Elements)
        int holderForIntsAtEvenElements = last evenList EVEN element
    

    注意我们从最后一个元素开始,所以当你走出递归方法时,这将是添加到新ArrayList的最后一个,因此它将按数字顺序排列 . 您可能会发现这篇文章很有意思:What does this boolean return mean?

    然后,我们想要从列表中删除最后一个元素,并再次递归调用该方法 .

    最后,当我们达到退出条件并开始出现时,我们想要添加我们一直存储到它们的整数,例如:

    evenList.add(holderForIntsAtEvenElements);
    return evenList;
    

    这并没有解决一个问题,如果列表没有偶数个元素,那么如何处理第一个元素 - 但是,我会让你试着解决它!这是代码和伪代码的良好组合,有望帮助您走上正确的轨道 .

  • 1

    伪码

    int[] evens,odds;
    
     function categorize(List<Integer> in,int idx)
       if(idx>=in.length)
             return
       int cur = in[idx]
       if(even), add to evens
       else add to odds
        categorize(in,idx+1)
    
  • 2

    您可以像这样使用简单的 for 循环:

    for (int i = 0; i < list.size(); i += 2) {
        System.out.println(list.get(i));
    }
    

    如果必须使用递归,这里是您可能采取的步骤的概述 . (我不会告诉你到底该做什么,因为你没有尝试任何东西,这就像是家庭作业 . )

    • 获取第一个元素并存储它

    • 从列表中删除(新)第一个元素

    • 打电话给自己

相关问题