import java.util.LinkedList;
public class Solution {
// 公式法(这道题中不行,因为有乘除法)
public int Sum_Solution2(int n) {
return n*(n+1)/2;
}
// 递归(这道题中不行,因为有if)
public int Sum_Solution3(int n) {
if (n > 0) {
return Sum_Solution3(n - 1) + n;
}
return 0; // 当n为0时,返回0
}
// 利用短路逻辑判断,作为递归的判断,消除了if语句
public int Sum_Solution(int n) {
int sum=0;
/*
当n>0时,左边的值为true,继续判断右边的,在判断右边的过程中,会把递归的值算出来并赋给sum,目的就已经达到了。至于res为true还是false,不关心,也用不到
当n<=0时,左边的值为false,直接短路,不再判断右边的,终止了递归的调用,开始一步步处理栈中之前保留的调用
*/
Boolean res = (n>0)&&((sum = Sum_Solution(n - 1)+n) >0); // 表达式中如果有等号,会计算出等号右边的值并赋给等号左边的变量。HashMap源码中有很多这样的写法
return sum;
}
public static void main(String[] args) {
Solution s = new Solution();
int n = 5;
int ans = s.Sum_Solution(n);
System.out.println(ans);
}
}