递归求和的大哦运行时

时间:2019-02-12 03:16:50

标签: c recursion sum runtime big-o

如果我使用for循环查找n之间的0 and n个数字之和,则我的运行时为O(n)。但是,如果我创建一个递归函数,例如:

int sum(int n) {
    if(n == 0)
        return 0;
    return n + sum((n - 1));
}

我的运行时仍是O(n)吗?

2 个答案:

答案 0 :(得分:6)

是的,您的运行时仍为O(N)。您的递归函数将“循环” N次,直到遇到基本情况为止。

但是请记住,您的空间复杂度也是O(N)。您的语言必须先保存n + ...,然后再评估sum((n - 1)),从而创建一堆N长的递归调用。

答案 1 :(得分:2)

@Primusa的答案解决了您的递归运行时问题。虽然我的回答不会解决您的运行时问题,但应注意,您不需要为此的算法。该总和的封闭公式为(n+1)*(n) / 2.

感谢卡尔·高斯!