面试题64. 求1+2+…+n

  • 难度中等
  • 本题涉及算法递归
  • 思路递归
  • 类似题型:

题目 面试题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;
    }
}