【发布时间】:2020-05-01 06:46:28
【问题描述】:
我正在阅读 CTCI 书籍,但无法理解其中的一个示例。他们开始于:
int sum(int n) {
if (n <= 0) {
return 0;
}
return n + sum(n-1);
}
并说明这是 O(n) 时间和 O(n) 空间,因为每个调用都会添加到调用堆栈并占用实际内存。
下一个例子是:
int f(int n) {
if (n <= 0) {
return 1;
}
return f(n - 1) + f(n-1);
}
并指出时间复杂度为 O(2^n),空间为 O(n)。虽然我明白为什么时间是 O(2^n),但我不确定为什么空间是 O(n)?他们的解释是“在任何给定时间仅存在 O(n) 个节点”。为什么我们不计算每个调用堆栈占用的空间,就像在第一个示例中一样?
附:在阅读了类似的问题后,我是否应该假设一旦我们开始向后(或向上)递归,堆栈帧的空间就会被回收?
【问题讨论】:
标签: time-complexity big-o space-complexity