2 votes

"RuntimeError : maximum recursion depth exceeded while getting the str of an object" en Python

Lorsque j'exécute le code suivant :

number = input("Please Input Number...")

def prime_checker(divisor):
       line = str(number) + " divided by " + str(divisor) + " = " + str(number/divisor)
       if number == divisor:
            print "This number is prime"
       elif number % divisor == 0:
             print line
       else:
            print "This number is not divisible by " + str(divisor)
            next_number = divisor + 1
            prime checker(next_number)

prime_checker(2)

Je reçois "RuntimeError : maximum recursion depth exceeded while getting the str of an object". J'essaie de construire un programme qui vérifiera tous les nombres sous le nombre entré pour voir si le nombre entré est premier. Si le nombre est divisible par quelque chose, le programme donnera la phrase de division. Cependant, lorsque le programme vérifie si le nombre saisi est divisible par 999, il commence à faire ce qui suit :

Fenêtre cmd Python

Y a-t-il un moyen de résoudre ce problème ? Ou est-ce la valeur maximale que je peux vérifier ?

2voto

Stephen Cowley Points 1444

Il existe de nombreuses façons de rechercher des nombres premiers. Je vous suggère de chercher sur Google si vous cherchez quelque chose de plus rapide.

Pour répondre à votre problème, il n'y a pas vraiment de raison de faire ce que vous faites de manière récursive. Si vous avez l'intention de le faire avec une méthode du type "vérifier chaque diviseur possible", la méthode itérative fonctionnera très bien.

Comme mentionné dans les commentaires, à moins que vous ne changiez certaines options internes, Python ne vous permettra pas de faire une récursion très profonde. Il semble que cela s'arrête autour de 1000 pour vous.

Essayez quelque chose comme ceci pour une approche itérative simple :

number = int(input("Please Input Number..."))

def is_prime(number):
    # Check all numbers between 2 and the number you are concerned about
    for divisor in range(2, number+1):
        if number == divisor:
            print('Number is prime')
            return True
        elif number % divisor == 0:
            print(str(number) + " divided by " + str(divisor) + " = " + str(number/divisor))
            return False
        else:
             print('Number is not divisible by ' + str(divisor))

is_prime(number)

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