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

    xiaoxiao2021-03-26  36

    题目描述

    求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

    思路

    首先没了上面那些关键字你会发现,你不能循环了,所以你得想办法循环,书上给的是构造函数,但是java默认构造函数不初始化,除非你手动,所以说就不行了没有if,你会发现递归的条件不能控制了,和for,while一样,其实我们失去的就是控制边界;那么想法就是如何让程序顺利退出; 3.下面说三种方法,异常,&&短路运算符,次方运算 static public int Sum_Solution1(int n) { try { int i=1%n; //递归到底,就会抛出异常 return n+Sum_Solution(n-1); }catch (Exception e) { return 0; } } //短路运算符,先算前面 static public int Sum_Solution(int n){ int i = n; boolean flag = (n>0) && (n+=Sum_Solution(n-1))>0; return n; } //这个其实是公式(n*(n+1)/2)==(n*n+n)/2;不过左移运算符本来就是除法,所以。。。。。 static public int Sum_Solution2(int n) { return (int)(Math.pow(n,2)+n)>>1; }

    收获

    眼界大开啊,各种奇怪的想法;
    转载请注明原文地址: https://ju.6miu.com/read-350173.html

    最新回复(0)