求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例:
输入: n = 3
输出: 6
短路思想:
与 运算符 A&&B
当A是false时,则B不会再去判断,会直接返回结果false
当A是true的时,则会判断B是否是true/false,是true则返回true,是false 则返回 false
或运算符 A|| B
当A是true的时候,则不会去判断B。会直接返回结果 true。
当A是false的时候,则继续判断B是否为true/ false 。为true 则结果为true ,为false 则结果为false
这里不允许使用、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
则首先想到使用递归实现,因为不能使用if 判断 ,所以使用短路思想。
使用运算符的短路思想 ,当 n>1说明还可以继续递归,则继续判断(tmp += sumNums(n-1)>0)是否可以执行
这里只要 n>1 就可以执行递归,所以只要n 满足条件即可,但是在java中 n>1 必须声明这个变量是谁才可以判断
代码演示
public static int sumNums(int n) {
int tmp = n;
//当n<1时候 与运算符左边不满足条件则不执行右边的 说明递归结束。
//这里必须声明为boolean 类型不然会报错误,解释器无法识别这是什么东西,声明后才知道这是逻辑运算!! falg 是true/或者false都无所谓!
boolean flag = ( n > 1 && (tmp += sumNums(n - 1))>0 );
return tmp;
}