mystery(int A[1..n], int n) {
// pre: n is a power of 2 for i=1..n {
for i = 1...n {
A[i] = A[i] + 1;
}
if (n>1) mystery(A, n/2);
}
}
我认为最坏的情况,它在 O(n) 中运行,对吗?
编辑:这是来自另一个旧考试(它为我们提供了答案),但以下算法在 O(n*log n) 时间内运行(根据答案)。为什么这样?我虽然这两个应该只有一些常数不同。
void silly (int n)
if (n>1)
for (int i=0; i<n; i++)
output "looping for fun"
silly(n/2)
for (int i=0; i<n; i++)
output "looping for more fun"
silly(n/2)
for (int i=0; i<n; i++)
output "looping for even more fun"