递归方法相互排斥?

时间:2016-06-11 17:11:18

标签: java recursion methods

我正在尝试编写一个方法来计算1和给定正整数n之间的奇数整数之和,而不使用if语句之外的其他任何东西(sheesh!)。它确实很好,直到我决定创建一个方法,递归地询问数字,直到它是积极的并使用它来获得n。

现在我的程序输出正确的结果,直到我输入一个负数。然后它要求一个正定的,直到我输入一个并输出0,值I初始化变量val。

我不确定逻辑错误在哪里。你能看一下吗?我确定这是显而易见的事情,但我想我今天刚刚结束了我的智慧。谢谢!

package oddsum;
    import java.util.Scanner;


public class Oddsum {
        public static int oddSum(int n){
         int val=0;
         if(n>1){

            if(n%2==0){
                val=n+oddSum(n-1);

            }else{
                val=oddSum(n-1);

            }
        }
        return val;
        } 
        public static int request(int n){
            Scanner in= new Scanner(System.in);
            System.out.println("Give me a positive integer: ");
            n=in.nextInt();
                if (n<0){
                    System.out.println("I said positive! ");
                    request(n);
                }
            return n;
        }


    public static void main(String[] args) {

        int val=0;
        int n=request(val);
        System.out.println(oddSum(n));  
    }

}

1 个答案:

答案 0 :(得分:1)

您应该从request()方法中删除输入参数。因为您的负输入是通过递归调用执行的。

public class Oddsum {
    public static int oddSum(int n) {
        int val = 0;
        if (n > 1) {

            if (n % 2 == 0) {
                val = n + oddSum(n - 1);

            } else {
                val = oddSum(n - 1);

            }
        }
        return val;
    }

    public static int request() {
        Scanner in = new Scanner(System.in);
        System.out.println("Give me a positive integer: ");
        int n = in.nextInt();
        if (n < 0) {
            System.out.println("I said positive! ");
            return request();
        }
        return n;
    }

    public static void main(String[] args) {
        int n = request();
        System.out.println(oddSum(n));
    }

}

输出;

Odd sum