递归数组添加正数

时间:2013-11-08 21:10:01

标签: java arrays recursion

我有一个需要数字的数组。我的一种方法是计算数组中的正数。因此,如果他们输入2 3 4 5 6和0来终止程序。它应该输入打印出的Postive数字:5但是它打印出正数:4。它错过了最后一个数字。但是,如果我做2 3 4 5 -1 4 0 {0终止}它在这种情况下打印出正确的正数数字5.我已经完成了一些调试,但似乎无法弄明白。有什么帮助吗?

public static int countPositive(int[] numbers, int startIndex, int endIndex)
{   
    if (startIndex == endIndex) 
    {   
        if (numbers[startIndex] > 0)        
        {   
            return 1;
        }   
        else
            return 0;      
    }   
    else
    {       
        if (numbers[startIndex] > 0)        
        {       
            return 1 + countPositive(numbers, startIndex +1, endIndex); 
        }
        else        
            return countPositive(numbers, startIndex +1, endIndex);     
    }
}

2 个答案:

答案 0 :(得分:0)

Goin粘贴所有代码,所以首先是整个代码:

public class JavaApplication5 {

    public static int countPositive(int[] numbers, int startIndex, int endIndex)
{   
    if (startIndex == endIndex) 
    {   
        if (numbers[startIndex] > 0)        
        {   
            return 1;
        }   
        else
            return 0;      
    }   
    else
    {       
        if (numbers[startIndex] > 0)        
        {       
            return 1 + countPositive(numbers, startIndex +1, endIndex); 
        }
        else        
            return countPositive(numbers, startIndex +1, endIndex);     
    }
}
    public static void main(String[] args) {

        int i=countPositive(new int[] { -3, 30, 40, 55, 62}, 0, 4);
        System.out.println(i);
    }
}

这段代码给了我4 4个正数:30,40,55,62 您可以使用数组和strt和结束索引。

int i=countPositive(new int[] { -3, 30, 40, 55, 62,-3, 43}, 0, 6);

上面的代码为我提供了5个正数的数字。

int i=countPositive(new int[] { -3, 30, 40, 55, 62,-3, 43}, 3, 6);

还给我3个正数:从53,52,-3和43,他们是552和43。 再试一次。

答案 1 :(得分:0)

可怕的是,代码在2个不同的其他分支中具有相同的逻辑。更好:

if (startIndex > endIndex) return 0;
else 
    return
       (numbers[startIndex] > 0 ? 1 : 0) 
       + countPositives(numbers, startIndex+1, endIndex);

另外,要计算整个数组:

countPositives(numbers, 0, length.numbers-1);