第一个的运行时间是O(log n),我知道这是大多数递归情况的运行时间。
int happy (int n, int m) {
if (n < 10) return n;
else if (n < 100)
return happy (n - 2, m);
else
return happy (n/2, m);
}
但是,第二个递归案例的运行时间是O(n)
int silly(int n, int m) {
if (n < 1) return m;
else if (n < 10)
return silly(n/2, m);
else
return silly(n - 2, m);
}
任何人都可以解释原因吗?我真的很感激!
答案 0 :(得分:1)
第一个函数比第二个函数更快地减少n
。 happy
将n
除以2,直到它低于100. silly
减去 2直到它低于10.
happy
是O(log n),因为它需要log_2(n)步,直到它低于100,然后最多50步才能低于1.
silly
是O(n),因为它需要n / 2步才能达到100以下,然后最多5步才能达到1以下。