剑指Offer.64 不使用乘除和条件和循环求和

    科技2024-12-07  45

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

    解题思路

    用递归的思想难免会用到判断语句, 否则程序不能停下来 那么如何不用条件判断语句, 但是又能达到相同效果呢, 使用 &&

    if (n > 1) { n += sumNums(n - 1); }

    观察这个语句

    boolean b = n > 1 && (n += sumNums(n - 1)) <= 0;

    当n > 1时, (n += sumNums(n - 1)才会执行, 至于<= 0还是> 0其实无所谓, 只是为了借助布尔变量 当n == 1时, 由于"短路"会直接跳出返回n 从而实现目标从1加到n

    代码

    class Solution { public int sumNums(int n) { boolean b = n > 1 && (n += sumNums(n - 1)) <= 0; return n; // 等于1时直接返回 } }
    Processed: 0.011, SQL: 8