我正在尝试编写一种方法来计算 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));
}
}
输出;
关于java - 哪些递归方法相互排斥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37766449/