【Offer】[64] 【求1+2+...+n】

题目描述

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

牛客网刷题地址

思路分析

  利用逻辑运算符的短路特性:
  

  1. 对于A && B,如果A为假,那么就不执行B了;而如果A为真,就会执行B。
  2. 对于A || B,如果A为真,那么就会不执行B了;而如果A为假,就会执行B。
  3. 我们可以使用递归来代替循环,用逻辑运算符&&或者||来代替判断语句。

测试用例

  1. 功能测试:输入5、10求1+2+..+5和1+2+...+10。
  2. 边界值测试:输入0和1。

Java代码

public class Offer064 {
    public static void main(String[] args) {
        test1();
        test2();
        test3();
        
    }

    public static int Sum(int n) {
        return Solution1(n);
    }


    private static int Solution1(int n) {
        int sum = n;
        boolean  flag = (n>1) && ((sum+=Solution1(n-1))>0);
//      boolean flag = (n==1) || ((sum+=Solution1(n-1))>0);
        return sum;
    }

    private static void test1() {
        System.out.println(Sum(100));
    }

    private static void test2() {

    }
    private static void test3() {

    }
}

代码链接

剑指Offer代码-Java

原文地址:https://www.cnblogs.com/haoworld/p/offer64-qiu12n.html