最后更新于
最后更新于
求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
示例 2:
限制:
1 <= n <= 10000
不能使用乘除法, 排除了使用等差数列求和公式直接求解的方法
接下来我们能想到的, 就是用朴素的循环的方法, 循环从1到n这些数字, 将它们逐个加在一起, 得到结果. 但for
, while
等循环方法都被禁用, 我们要想一个替代的方法.
替代循环的方法就是递归.
然后无论是循环还是递归, 都要有一个停止的条件, 使用条件, 就要使用if
或者条件表达式, 但这些都被禁用了, 那么什么方法可以进行替代呢?
答案是逻辑运算符. Python中有and
, or
, not
三种逻辑运算符, 其中and
, or
都接受两个变量(或表达式), 且都具有短路效应, 即对A and B
来说, A
如果成立, 为False
, 就不会执行B
了; 同样对A or B
, A
如果为True
, 也不会执行B. 这种短路效应可以控制递归终止, 起到了代替if
的作用
我们的终止条件就是当递归到当前数字num
为0
时停止, 0
在单独进行判断时为False
, 因此我们可以选用and
逻辑运算符进行短路.
在Python中我们熟悉return A or B
这种表达式, 当A
为True
的时候返回A
, 否则返回B
. 而其实也有return A and B
这种形式, 当A
为False
的时候返回A
, 否则返回B
. 因此可以用如下的一行代码解决本题.
可以总结为: Python的 and
操作如果最后结果为真, 返回最后一个表达式的值; or
操作如果结果为真, 返回第一个结果为真的表达式的值.