So zählen Sie grundlegende Mathematikoperationen, die in einer rekursiven Python -Funktion durchgeführt werdenPython

Python-Programme
Guest
 So zählen Sie grundlegende Mathematikoperationen, die in einer rekursiven Python -Funktion durchgeführt werden

Post by Guest »

Ich muss ein Python -Skript schreiben, das die Anzahl der Operationen zählt: +, -, *, //, %,>,
Python -Code: < /p>

Code: Select all

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>
Mein Skript: < /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>
Ich habe das Skript mit dem Verständnis von n = 1 geschrieben. Die Berechnung von M = 1 % 3 erfordert 1 Betrieb, und der Wert von m beträgt 1. Dann führt der Code 3 Tests des == Operation vor dem Finden eines zu wahren, wenn es auf elif m == 1 trifft. Bis zu diesem Zeitpunkt wurden 4 Operationen durchgeführt. zuletzt für die -). Der rekursive Anruf hat jetzt n = 0 Aus dem rekursiven Aufruf nach Foo. ) treten vor dem Anruf auf anschließend anschließend 1 weitere (+) danach, um die insgesamt 10 zu bringen, ohne die Anzahl in der Bar zu zählen. Simulation des Aufrufs in Bar (1), 1 Der Betrieb (K+1) wird durchgeführt, wenn das obere Ende des Bereichs der für die für die für die Schleife berechnete Reichweite der Gesamtzahl auf 11 erhält ist leer und die Punktzahl von 0 wird zurückgegeben, um die (bereits gezählte) Operation und Rückgabeanweisung in Foo zu vervollständigen. Das bedeutet also, dass insgesamt 11 grundlegende Operationen durchgeführt wurden, und wir kehren 11 als Antwort zurück, wenn n = 1. < /p>
mein Skript nur richtig funktioniert, wenn n = 1 jemand kann Helfen Sie mir, mein Skript zu beheben, um ein Verständnis dafür zu erhalten, wie Sie die richtige Zählung durchführen, wenn 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}')

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post