剑指offer64

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

示例:

输入: n = 3
输出: 6

短路思想:
与 运算符 A&&B
当A是false时,则B不会再去判断,会直接返回结果false
当A是true的时,则会判断B是否是true/false,是true则返回true,是false 则返回 false

或运算符 A|| B
当A是true的时候,则不会去判断B。会直接返回结果 true。
当A是false的时候,则继续判断B是否为true/ false 。为true 则结果为true ,为false 则结果为false

这里不允许使用、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
则首先想到使用递归实现,因为不能使用if 判断 ,所以使用短路思想。
使用运算符的短路思想 ,当 n>1说明还可以继续递归,则继续判断(tmp += sumNums(n-1)>0)是否可以执行
这里只要 n>1 就可以执行递归,所以只要n 满足条件即可,但是在java中 n>1 必须声明这个变量是谁才可以判断

代码演示

    public static int sumNums(int n) {
        int tmp = n;
        //当n<1时候 与运算符左边不满足条件则不执行右边的 说明递归结束。
        //这里必须声明为boolean 类型不然会报错误,解释器无法识别这是什么东西,声明后才知道这是逻辑运算!! falg 是true/或者false都无所谓!
        boolean flag = ( n > 1 && (tmp += sumNums(n - 1))>0 );
        return tmp;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值