A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

/**
* 题目:求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句(A?B:C)
*
*/
/**
* 首先想到的是用递归,但是递归的出口在哪里? 出口一半都是if()之类的语句,java中&&和||运算符就有类似于if的作用.
* &&和||运算符有短路的效果,这里很巧妙的作为了递归结束的条件,不得不佩服写出这个代码的高手!
* 以下解法来自于互联网,仅供参考.
*/

public class Demo {
        public static void main(String[] args) {
                System.out.println(add_1(100));
                System.out.println(add_2(100));
        }

        // 解法1:
        public static int add_1(int n) {
                int sum = n;
                boolean b = (n > 0) && (sum += add_1(n - 1)) > 0;
                return sum;
        }

        // 解法2:
        public static int add_2(int n) {
                int sum = n;
                boolean b = (n == 0) || (sum += add_2(n - 1)) > 0;
                return sum;
        }
}
/**
* 输出结果:
* 5050
* 5050
*/

1 个回复

倒序浏览
不错!又学了点东西
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马