Skip to content

Latest commit

 

History

History
75 lines (64 loc) · 1.53 KB

046-不使用乘除与判断求前N项正整数的和.md

File metadata and controls

75 lines (64 loc) · 1.53 KB

面试题46 求 1+2+3+...+n(不使用乘除以及条件判断语句求前 n 项正整数的和)

题目:

求 1+2+...+n。要求不能使用乘除法、for、while、if、else、switch、case等关键字 及条件判断语句。

package algorithm.foroffer.top50;

import org.junit.Test;

/**
 * description:
 *
 * @author liyazhou
 * @create 2017-06-03 21:36
 *
 * 面试题46:求 1+2+...+n
 *
 * 题目:
 *      求 1+2+...+n。要求不能使用乘除法、for、while、if、else、switch、case等关键字
 *      及条件判断语句。
 *
 * 考查点:
 *      1. 发散思维,使用对象数组初始化实现求和功能
 *
 * 思路:
 *      1. 不能使用公式法(*,/),不能使用循环(for/while)、不能使用递归(if)
 *
 */

class Add{
    static int sum = 0;
    static int n = 0;
    public Add(){
        n ++;
        sum += n;
    }

    public static int sum(int n){
        // n = 0;
        // sum = 0;
        // 创建对象数组,仅仅是分配内存空间,不调用构造函数
        Add[] adds = new Add[n];
        return sum;
    }
}
public class Test46 {

    @Test
    public void test(){
        // int sum = Add.sum(5);
        // System.out.println(sum);
    }

    /**
     * 不用 if 判断递归终止条件的递归
     * @param n 参数
     * @return 和
     */
    public int sum(int n){
        int sum = n;
        boolean bool = (n > 0) && ((sum +=sum(n-1)) > 0);
        return sum;
    }

    @Test
    public void test2(){
        System.out.println(sum(5));
    }

}