我试图写一个方法,找出第一个位置和最后一个位置之间有多少奇数。该方法接受一个数组,然后在低位和高位接受两个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;
}
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;
}
}
您的函数应该如下所示:
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功能。而且可能要快得多。
您的代码中有一些错误:
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} 我必须递归地做,用一个只得到数组本身及其大小的函数。我也只允许使用一个额外的递归函数来解决这个问题。 任何想法或想法都将受到最大的赞