题目:
求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:输入: n = 3 输出: 6
示例 2:输入: n = 9 输出: 45
限制:1 <= n <= 10000
解题思路:
1+2+3+...+n的计算方法主要有三种:等差求和公式、迭代、递归。而根据本题的限制条件,最后采用递归,但是终止条件采用逻辑运算符当中的短路效应。
(&&、||、!)短路效应的含义:
- if(A && B) // 若 A 为 false ,则 B 的判断不会执行(即短路),直接判定 A && B 为 false
- if(A || B) // 若 A 为 true ,则 B 的判断不会执行(即短路),直接判定 A || B 为 true
代码:
class Solution:
def __init__(self):
self.res=0
def sumNums(self, n: int) -> int:
n>1 and self.sumNums(n-1) #当 n = 1 时 n > 1 不成立 ,此时 “短路” ,终止后续递归
self.res+=n
return self.res
复杂度:
- 时间复杂度:O(n),开启n个递归函数。
- 空间复杂度:O(n),递归深度达到n,系统使用O(N)大小的额外空间。