【剑指offer-JZ64】求1+2+3+...+n

88 阅读1分钟
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);
    }
}


题源:www.nowcoder.com/practice/7a…