如果我使用for循环查找n
之间的0 and n
个数字之和,则我的运行时为O(n)
。但是,如果我创建一个递归函数,例如:
int sum(int n) {
if(n == 0)
return 0;
return n + sum((n - 1));
}
我的运行时仍是O(n)
吗?
答案 0 :(得分:6)
是的,您的运行时仍为O(N)
。您的递归函数将“循环” N
次,直到遇到基本情况为止。
但是请记住,您的空间复杂度也是O(N)
。您的语言必须先保存n + ...
,然后再评估sum((n - 1))
,从而创建一堆N
长的递归调用。
答案 1 :(得分:2)
@Primusa的答案解决了您的递归运行时问题。虽然我的回答不会解决您的运行时问题,但应注意,您不需要为此的算法。该总和的封闭公式为(n+1)*(n) / 2.
感谢卡尔·高斯!