天天看點

劍指Offer 46 求1+2+3+....n

題目描述

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。

思路

  1. 首先沒了上面那些關鍵字你會發現,你不能循環了,是以你得想辦法循環,書上給的是構造函數,但是java預設構造函數不初始化,除非你手動,是以說就不行了
  2. 沒有if,你會發現遞歸的條件不能控制了,和for,while一樣,其實我們失去的就是控制邊界;那麼想法就是如何讓程式順利退出;

    3.下面說三種方法,異常,&&短路運算符,次方運算

static public int Sum_Solution1(int n) {
        try {
            int i=%n; //遞歸到底,就會抛出異常
            return n+Sum_Solution(n-);
        }catch (Exception e)
        {
            return ;
        }

    }
           
//短路運算符,先算前面
    static public int Sum_Solution(int n){
        int i = n;
        boolean flag = (n>) && (n+=Sum_Solution(n-))>;
        return n;
    }
           
//這個其實是公式(n*(n+1)/2)==(n*n+n)/2;不過左移運算符本來就是除法,是以。。。。。
    static public int Sum_Solution2(int n)
    {
        return (int)(Math.pow(n,)+n)>>;
    }
           

收獲

  1. 眼界大開啊,各種奇怪的想法;