题目描述
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
解题思路
很容易想到由递归解决:
public int sumNums(int n) {
if(n == 1)
return 1;
else
return n+sumNums(n-1);
}
但由于无法使用if判断递归的出口,则使用逻辑运算符A&&B来确定。
逻辑运算符的短路效应
if(A && B) // 若 A 为 false ,则 B 的判断不会执行(即短路),直接判定 A && B 为 falseif(A || B) // 若 A 为 true ,则 B 的判断不会执行(即短路),直接判定 A || B 为 true
本题需要实现“当n=1时终止递归”的需求,可以通过短路效应来实现。
n>1 && sumNums(n-1) //当n=1时,终止递归
class Solution {
public int sumNums(int n) {
boolean x = n > 1 && (n+=sumNums(n-1)) > 0;
return n;
}
}