java - 哪些递归方法相互排斥?

标签 java recursion methods

我正在尝试编写一种方法来计算 1 和给定正整数 n 之间的奇数之和,除了 if 语句之外不使用任何其他内容(天啊!)。效果很好,直到我决定还创建一个方法,该方法会递归地询问数字,直到它为正数并使用它来获取 n。

现在我的程序输出正确的结果,直到我输入负数。然后它要求输入一个正数,直到我输入 1,它输出 0,即我初始化变量 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));  
    }

}

最佳答案

您应该从 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

关于java - 哪些递归方法相互排斥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37766449/

相关文章:

c# - 语句不能存在于方法之外?

JavaScript。对象的一个​​成员是否可以在不显式引用对象本身的情况下访问该对象的另一个成员?

Java 异常 - 不使用 try catch 处理异常

java - Pointer[Float] 类型的表达式不符合 Scala 中预期的 Pointer[Float] 类型

python - Karatsuba 乘法实现

c# - 在 C# 上使用多线程的问题

java - Spring ORM 4.0.5 和 Hibernate 4.3.5 - 无法保存到数据库

java - 无法使用 WebDriver 在文本字段中输入文本

Python 递归函数 - 这里发生了什么?

C#:为方法嵌套返回 'this'?