- 难度:
中等
- 本题涉及算法:
递归
- 思路:
递归
- 类似题型:
题目 面试题64. 求1+2+…+n
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
限制:
1 <= n <= 10000
方法一 递归
- 解题思路:
- 题目其实指明了要用
递归
- 题目其实指明了要用
- 复杂度分析:
- 时间复杂度:$O(n)$。递归函数递归 $n$ 次,每次递归中计算时间复杂度为 $O(1)$,因此总时间复杂度为 $O(n)$。
- 空间复杂度:$O(n)$。递归函数的空间复杂度取决于递归调用栈的深度,这里递归函数调用栈深度为 $O(n)$,因此空间复杂度为 $O(n)$。
python
class Solution(object):
def sumNums(self, n):
"""
:type n: int
:rtype: int
"""
# and这个逻辑运算的本质是——如果A&&B,A为false,B是不计算的;只有当A为true,才会继续计算B
return n!=0 and n + self.sumNums(n - 1)
java
class Solution {
public int sumNums(int n) {
if (n == 1) return n;
n += sumNums(n - 1);
return n;
}
}
PREVIOUS面试题68 - I. 二叉搜索树的最近公共祖先