Мне нужно написать сценарий Python, который подсчитывает количество случаев этих операций: +, -, *, //, %,>,
Код Python: < /p>
def bar(k):
score = 0
for i in range(2, k + 1):
j = i - 1
while j > 0:
if i % j == 0:
score = score // 2
else:
score = score + 10
j = j - 1
return score
mod = 10**9 + 7
def foo(n):
m = n % 3
if n == 0:
return 1
elif m == 0:
v = foo(n // 3)
t = 0
for i in range(1, n+1):
t = t + bar(4 * i)
return v + t
elif m == 1:
v = foo(n - 1)
return v + bar(n * n * n)
else:
v = foo(n - 2)
r = 1
for a in range(2, n):
r = r * a % mod
r = r + bar(n)
return v + r
< /code>
Мой скрипт: < /p>
def count_operations(n):
if n == 0:
return 1 # Base case: 1 operation for returning 1
elif n % 3 == 0:
return count_operations(n // 3) + 4
elif n % 3 == 1:
return 6 + count_operations(n - 1) + 4
else:
return 9 + 2 * count_operations(n - 2)
< /code>
Я написал сценарий с пониманием того, когда n = 1, расчет M = 1 % 3 принимает 1 операцию, а значение m равно 1. Затем код выполняет 3 теста == Операция, прежде чем найти его, чтобы быть истинным, когда он встречается с Elif M == 1:. До этого момента было выполнено 4 операции. Последний для -). Рекурсивный вызов теперь имеет n = 0, поэтому еще 2 операции (n%3 и n == 0), прежде чем он вернется с его результатом. о возвращении из рекурсивного вызова в Foo.
Следующие встречи кода возвращают v + bar (n n n), что означает, что еще 2 операции (обе * ) происходить до вызова в стержень, затем еще 1 (+) впоследствии, чтобы принести общее количество 10, не считая число, сделанное в баре. Моделируя вызов к стержне (1), еще 1 операция (K+1) выполняется, когда рассчитывается верхний конец диапазона цикла для петли, в результате чего общее количество до 11. Для цикла заканчивается сразу же, поскольку диапазон ее итерации пуст, а оценка 0 возвращается для завершения (уже подсчитанного) + оператора работы и возврата в Foo. Таким образом, это означает, что в общей сложности было выполнено 11 основных операций, и мы возвращаем 11 в качестве ответа, когда n = 1. Помогите мне исправить мой скрипт, чтобы понять, как сделать правильный подсчет, когда n> 1?class Integer(int):
n_ops = 0
def new_patch(name):
def patch(self, *args):
Integer.n_ops += 1
value = getattr(int, name)(self, *args)
if isinstance(value, int) and not (value is True or value is False):
value = Integer(value)
return value
patch.__name__ = name
return patch
methods = {
'__le__': '\u2264',
'__lt__': '',
'__eq__': '==',
'__add__': '+',
'__sub__': '-',
'__mul__': '*',
'__floordiv__': '//',
'__mod__': '%',
}
for name in methods:
setattr(Integer, name, new_patch(name))
def bar(k):
score = 0
for i in range(2, k + 1):
j = i - 1
while j > 0:
if i % j == 0:
score = score // 2
else:
score = score + 10
j = j - 1
return score
mod = 10**9 + 7
Integer.n_ops+=1
def foo(n):
m = n % 3
if n == 0:
return 1
elif m == 0:
v = foo(n // 3)
t = 0
for i in range(1, n+1):
t = t + bar(4 * i)
return v + t
elif m == 1:
v = foo(n - 1)
return v + bar(n * n * n)
else:
v = foo(n - 2)
r = 1
for a in range(2, n):
r = r * a % mod
r = r + bar(n)
return v + r
def countOps(n):
print(f'Number of operations when n={n}: {Integer.n_ops}')
Подробнее здесь: https://stackoverflow.com/questions/794 ... e-function
Как считать основные математические операции, выполненные в рекурсивной функции Python ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как считать основные математические операции, выполненные в рекурсивной функции Python
Anonymous » » в форуме Python - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-