【问题标题】:Recursive methods which exclude each other?相互排斥的递归方法?
【发布时间】:2016-06-11 17:11:17
【问题描述】:

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

现在我的程序输出正确的结果,直到我输入一个负数。然后它会要求一个正数,直到我输入一个并输出 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));  
    }

}

【问题讨论】:

    标签: java recursion methods


    【解决方案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));
        }
    
    }
    

    输出;

    【讨论】:

    • 我做了,现在代码看起来好多了,但是如果我在输入一个正数之前输入一个负数,结果仍然为零。我不认为那是错误。
    • 我测试了它并得到了正确的结果。让我把整个代码发给你。
    • 哈哈,发现bug了。当我在 if(n
    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2021-12-17
    • 2012-12-17
    相关资源
    最近更新 更多