Рассмотрим этот код:
import matplotlib.pyplot as plt
# Returns 2^n
def pow(n):
if n == 0:
return 1
x = pow(n//2)
if n%2 == 0:
return x*x
return 2*x*x
y = [10^4, 10^5,10^6, 10^7, 10^8, 10^9, 10^10]
z = []
for n in y:
start = time.time()
pow(n)
print(n, time.time() - start) # elapsed time
z.append(time.time()-start)
plt.plot(y,z)
plt.show()
Я пытаюсь выяснить, какова временная сложность рекурсивной функции pow(n)
.
Я вычислил сложность времени как O(log(n))
, нопри использовании функции time.time()
функция выглядит линейной.Почему?
Почему сложность времени O(n)
, а не O(log(n))
?
![Graph](https://i.stack.imgur.com/Qkfcv.png)