题目描述
求1+2+...+n,要求不能使用乘除法、for、 while if else. switch、
case等关键字及条件判断语句( A?B:C)。
思路分析
利用逻辑运算符的短路特性:
- 对于A && B,如果A为假,那么就不执行B了;而如果A为真,就会执行B。
- 对于A || B,如果A为真,那么就会不执行B了;而如果A为假,就会执行B。
- 我们可以使用递归来代替循环,用逻辑运算符&&或者||来代替判断语句。
测试用例
- 功能测试:输入5、10求1+2+..+5和1+2+...+10。
- 边界值测试:输入0和1。
Java代码
public class Offer064 {
public static void main(String[] args) {
test1();
test2();
test3();
}
public static int Sum(int n) {
return Solution1(n);
}
private static int Solution1(int n) {
int sum = n;
boolean flag = (n>1) && ((sum+=Solution1(n-1))>0);
// boolean flag = (n==1) || ((sum+=Solution1(n-1))>0);
return sum;
}
private static void test1() {
System.out.println(Sum(100));
}
private static void test2() {
}
private static void test3() {
}
}