题目:
求 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 不能用"="?