Python中的“ RuntimeError:获取对象的str时超出了最大递归深度”

时间:2018-12-11 23:57:36

标签: python

当我运行以下代码时:

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)

我收到“ RuntimeError:获取对象的str时超出了最大递归深度”。 我正在尝试构建一个程序,该程序将检查输入数字下的所有数字,以查看输入数字是否为质数。 如果数字可以被任何数整除,则程序将给出除法语句。 但是,当程序检查输入的数字是否可被999整除时,程序将开始执行以下操作:

Python cmd window

有什么办法可以解决这个问题?还是我可以检查的最大值?

1 个答案:

答案 0 :(得分:2)

有很多搜索素数的方法。我会建议您在Google上搜索,如果您正在寻找更快的东西。

回答您的问题,实际上没有理由递归地执行您的操作。如果您打算使用“检查每个可能的除数”这种方法进行迭代,那么迭代将可以正常工作。

如评论中所述,除非您更改一些内部选项,否则Python不会让您进行深层次的递归。看起来它为您停了1000左右。

尝试类似的方法以获得简单的迭代方法:

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)