题目很简单 求1 - n的和,但是要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
我想了蛮久,发现这要求下能使用的 的符号也就这些,单目运算符:++和--,双目运算符:+,-,移位运算符<<和>>,关系运算符>,<等,逻辑运算符&&,||,&,|,^,赋值=
那怎么从这里面找出能解除这题的呢所需要的符号呢
不能用循环那只能用递归了, 那结束条件怎么判断呢,这里不能使用 if else, 从符号里找,发现可以使用逻辑运算符,这里可以使用 && ||
所以整体思路应该为:
声明一个变量用来统计 数字之和
通过递归进行求和 。 这里的n需要向下递减 但是不要写成 n-- ,会引起堆栈内存溢出
给出代码:
通过 &&来解决
public static int Sum_Solution(int n) {
int res = n;
boolean flag = (n > 0) && ( res +=Sum_Solution(--n)) > 0;
return res;
}
通过 || 来解决
public int Sum_Solution(int n) {
boolean falg=(n==0)||((n+=Sum_Solution(n-1))>-1);
return n;
}