Day14 求1+2+…+n【Q】

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

思路:

  • 短路求值。
  • C语言/C++中,逻辑与【&和&&】的区别
    &两边 都会运算
    &&先算左侧,若左侧为假【False】,右侧就不运算了
    【|和||同理】||先算左侧,若左侧为真【True】,右侧就不运算了
  • python中,用and和or来实现短路求值

代码:
① C++

class Solution {
public:
    int sumNums(int n) {
        n && (n+=sumNums(n-1));//n>0时,才会运算右侧的 n=n+sumNums(n-1);递归到n==0时,不会运算右侧,直接运行下一行代码return n=0,再逐层向上返回结果值
        return n;
    }
};

运行效果
在这里插入图片描述
② python

class Solution:
    def sumNums(self, n: int) -> int:
        return n and n+self.sumNums(n-1)

运行效果
在这里插入图片描述

③ 用if的python写法【不符合题目要求,仅参考其递归思路】

class Solution:
    def sumNums(self, n: int) -> int:
        if n==0:#递归的基本结束条件,最小规模问题的直接解决
            return 0
        if n>0:#其他情况下,减小问题规模,向基本结束条件演进
            return n+self.sumNums(n-1)#调用自身

运行效果
在这里插入图片描述
④ 利用python中的sum()函数,对range()函数生成的可迭代对象求和

class Solution:
    def sumNums(self, n: int) -> int:
        return sum(range(1,n+1))

运行效果
在这里插入图片描述
【错误代码】
python中 使用and和or 不能用"="?
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值