Я застрял в этой нотации Big O о том, как она должна быть O (n ^ 3). Где мой мыслительный процесс пошел не так?
Я знаю, что вложенный цикл for равен O(n^2) и что цикл while, вероятно, является функцией O(nlogn), потому что цикл for является функцией O(n), а значение цикла while умножается на два. что делает его O (logn). При этом заявлено, что ответ равен O (n ^ 3), и я не понимаю, как это получилось, если только рекурсивная часть функции не имеет к этому никакого отношения?
def do_stuff2(n, x=1.23):
if n <= 0:
return 0
val = 1
for i in range(n//2):
for j in range(n//4):
x += 2*x + j/2 + i*1.2
while val <= n:
for i in range(n):
x += val**2 + i//2
val *= 2
x += do_stuff2(n - 1, x/2)
return x
Я считаю, что x не влияет на нотацию большого o, потому что это константа, потому что она не используется для определения того, сколько раз повторяется любой из циклов.
Итак, опять же, я ожидал, что вывод функции будет O (n ^ 2), но фактический вывод равен O (n ^ 3)