问题描述
求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。输入n的值,输出1+2+…+n的结果。
限制:1<=n<=10000
示例1:
输入:3
输出:6
示例2:
输入:9
输出:45
问题分析
题目要求了不能使用循环,那就只能用递归了,但是递归需要一个结束的条件,题目要求不能使用分支判断语句,那就只能使用短路逻辑了。
逻辑运算符,以 && 为例,A && B 当语句A满足false时,返回值就是false,语句B将不再执行。以 II 为例,A || B 当语句A满足true时,返回值就是true,语句B将不再执行。
代码实现
import java.util.Scanner;
public class Sum_1_n {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(sumNums(n));
}
private static int sumNums(int n) {
boolean bo = n > 0 && (n += sumNums(n - 1)) > 0; //当n<=0时,短路与发挥作用,&&后面的语句不再执行,递归开始回溯
return n;
}
}