2 votes

Comment limiter le nombre d'appels récursifs à 2 fonctions simultanément ? - Python

def f1(t):
    if t < 0:
        return 0
    result = 0
    result = 1.5 * f2(t-1) + 3.5 * f1(t-1)
    return result

def f2(t):
    if t < 0:
        return 1
    result = 0
    result = 1.5 * f1(t-1) + 3.5 * f2(t-1)
    return result

for i in range(10):
    result = 0
    result = f1(i) + f2(i)
    print(result)

L'exécution du code ci-dessus prend beaucoup de temps. Je veux limiter le nombre d'exécutions de f1() et f2() à 10 exécutions chacune pour chaque itération de la boucle for puis passe à la valeur suivante du for-loop. Comment faire ?

Edit : 1. pseudo code original pour cette partie 2. fonctions réelles

1voto

גלעד ברקן Points 3044

J'ai parfois besoin d'une méthode similaire pour déboguer du code récursif. Une méthode très simple consiste à déclarer une variable dans une portée extérieure à la fonction récursive.

iterations_f1 = 10
iterations_f2 = 10

Ensuite, ajoutez temporairement une logique à l'intérieur de la fonction récursive pour revenir avant un autre appel récursif si les itérations ont été satisfaites.

def f1(t):
  global iterations_f1
  iterations_f1 = iterations_f1 - 1
  if iterations_f1 == 0:
    return

  # rest of funtion
  ...

0voto

Olivier Melançon Points 15762

Vous pourriez utiliser un argument de mot-clé pour transmettre la profondeur de récursion.

def f1(t, _max_depth=10):

    if _max_depth > 0:
        if t < 0:
            return 0
        result = 0
        result = 1.5 * f2(t-1, _max_depth=_max_depth - 1) + 3.5 * f1(t-1, _max_depth=_max_depth - 1)
        return result

    else:
        # return some default value here

Vous pouvez faire de même pour f2 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X