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

如何使用递归方法找出数组中的奇数整数?

曹泉
2023-03-14

我试图写一个方法,找出第一个位置和最后一个位置之间有多少奇数。该方法接受一个数组,然后在低位和高位接受两个int。此方法需要递归生成。这是我到目前为止的情况。下面是方法调用和int数组。我得到的输出是1,但答案应该是2。

int array [] = {5, 2, 5, 6, 3, 1};
int n = countOddsInRange(array, 1, 4)

public static int countOddsInRange(int [] a, int first, int last)
{
    int count = 0;
    if(first <= last)
    {
        countOddsInRange(a, a[first + 1], a[last]);
        if(a[first] % 2 == 0)
        {
            count++;
        }
    }
    return count;   
}

共有3个答案

戴靖
2023-03-14
public class CountOddsInRange {
    public static void main(String[] args) {
        int array[] = {5, 2, 5, 6, 3, 1};
        int n = countOddsInRange(array, 0, array.length - 1);
        System.out.println("No of odds is " + n);
    }

    public static int countOddsInRange(int [] a, int first, int last)
    {
        int count = 0;
        if(first <= last)
        {
            count+=countOddsInRange(a, first + 1, last);
            if(a[first] % 2 != 0)
            {
                count++;
            }
        }
        return count;   
   }
}
南门鸿雪
2023-03-14

您的函数应该如下所示:

public static int countOddNumber(int [] a, int first, int last){
    return countOddNumber(a, first, last, 0);
}

public static int countOddNumber(int [] a, int first, int last, int count){
    //in recursive function start with termination test.
    if (first == last){
        return count + isOdd(a[first]);
    }
    else{
        return countOddNumber(a, first+1, last, count) + isOdd(a[first]);
    }
}

public static int isOdd(int number){
    if(number%2 == 0){return 1;}
    else{return 0}
}

您还应该添加一个测试来检查first是否小于last,以避免无限循环;)

PS:mod(元素,2)=0的过滤器元素,然后获取集合的大小。该方法也使用函数式风格,并使用新的Java8功能。而且可能要快得多。

詹甫
2023-03-14

您的代码中有一些错误:

  1. 你在数偶数,而不是奇数。如果(a[第一]%2!=0),将条件更改为<代码>
  2. 递归调用应该获取数组的索引,而不是这些位置的值
  3. 您应该将递归调用的结果添加到总数中:count=countOddsInRange(a,first 1,last)

总结如下:

public static int countOddsInRange(int [] a, int first, int last)
{
    int count = 0;
    if(first <= last)
    {
        count+=countOddsInRange(a, first + 1, last);
        if(a[first] % 2 != 0)
        {
            count++;
        }
    }
    return count;   
}
 类似资料:
  • 在LeetCode上解决数组旋转时,我编写了一个递归算法来解决这个问题: 给定一个数组,将数组向右旋转k步,其中k为非负。 例1: 输入: Nums=[1,2,3,4,5,6,7], k=3输出:[5,6,7,1,2,3,4]说明:向右旋转1步:[7,1,2,3,4,5,6]向右旋转2步:[6,7,1,2,3,4,5]旋转3步向右:[5,6,7,1,2,3,4] 例2: 输入:nums=[-1,-

  • 问题内容: 我有一个我要为类创建的程序,该程序使用递归返回数组中所有整数的总和。到目前为止,这是我的程序: 但是,我相信我得到了三个都相关的错误,但是我不知道为什么它会找到一种null类型: 问题答案: 该解决方案比看起来简单,请尝试以下操作(假设数组的长度为非零): 这样称呼它:

  • 我有一个任务,它获取一个int值“n”和一个Int Array作为参数,并且应该返回一个布尔值。该方法应该确定给定数组中有多少个“n”。如果数字是偶数,则方法应该返回true,否则返回false。如果数组的长度为0,它也应该返回“false”。 我设法做到的是: 老实说,我真的很困惑,我不知道该怎么办。我真的已经尽力了,但是我在这项任务上工作的时间越长,我就越不理解。感谢任何帮助,并提前感谢您!:

  • 问题内容: 对于需要解决的问题之一,我使用for循环找到了数组的最大值,因此我尝试使用递归找到它,这就是我想出的: 因此它可以正常工作并获取最大值,但是我的问题是:对于基本情况,返回a [head]以及对于在开头处的值大于最后一个值的情况,可以吗? 问题答案: 您只需一个计数器即可轻松完成此操作,只需使用您这次想要比较的值的索引即可: 这样可以更好地显示正在发生的情况,并使用默认的“递归”布局,例

  • 本文向大家介绍C#递归算法寻找数组中第K大的数,包括了C#递归算法寻找数组中第K大的数的使用技巧和注意事项,需要的朋友参考一下 1.概述   国人向来喜欢论资排辈的,每个人都想当老大,实在当不成,当个老二,老三,老K也不错,您一定看过这样的争论: 两个人吵架,一个人非常强势,另外一个忍受不住了便说:"你算老几呀?",下面就通过这篇文章就是要解决找出老几的问题! 2.应用场景   在向量V[firs

  • 我有一个很难处理的任务。 我试图编写一个递归函数(完全没有循环),给定一个数组及其长度,它将打印一对子数组,每个子数组的和将是整个数组和的一半。换句话说,数组被分成两组整数,以便它们的和相等。 例如,给定数组{1,2,2,0,5},函数应输出{1,2,2}{0,5} 我必须递归地做,用一个只得到数组本身及其大小的函数。我也只允许使用一个额外的递归函数来解决这个问题。 任何想法或想法都将受到最大的赞