递归python3代码中的堆栈溢出

硕大的

我试图构建一个简单的代码,n使用python解决带有值的平方运算,此外,我想学习递归。我制作了三种不同的样式代码,例如以下语法:

第一个代码

def pangkat(nilai, pangkat):
    a = int(1)
    for i in range(pangkat):
        a = a * nilai
    return a

if __name__ == "__main__":
    print(pangkat(13, 8181))

第二码

def pangkat(nilai, pangkat):
    hasil = nilai**pangkat
    return hasil

if __name__ == "__main__":
    print(pangkat(13, 8181))

第三码

def pangkat(nilai, pangkatnilai):
    if pangkatnilai == 1:
        return nilai

    return nilai * pangkat(nilai, pangkatnilai-1)

if __name__ == "__main__":
    print(pangkat(13,8181))

注意:paramnilai作为将被引发的数字,以及pangkat作为将被引发的数字param nilai),例如,当我填写nilaiand时,所有这些代码都可以正常工作param

输入0

pangkat(13, 12)

输出0

23298085122481

当我更改参数pangkat> = 1000时发生了问题,它会说,它将给我一个错误,但仅在第三个代码中出现。

Traceback (most recent call last):
  File "pang3.py", line 8, in <module>
    print(pangkat(13,1000))
  File "pang3.py", line 5, in pangkat
    return nilai * pangkat(nilai, pangkatnilai-1)
  File "pang3.py", line 5, in pangkat
    return nilai * pangkat(nilai, pangkatnilai-1)
  File "pang3.py", line 5, in pangkat
    return nilai * pangkat(nilai, pangkatnilai-1)
  [Previous line repeated 995 more times]
  File "pang3.py", line 2, in pangkat
    if pangkatnilai == 1:
RecursionError: maximum recursion depth exceeded in comparison

虽然第一个和第二个代码运行良好。我的递归函数可能会出什么问题?再加上我需要它的解释,谢谢!

注意:是否有可能像我需要的那样使用递归更好的方法?我使用自己的逻辑构建递归,因此我希望是否有人可以使用该代码更好的方法。

布莱克金

Python解释器限制了您可以递归的深度。默认情况下,深度为1000个级别的函数调用,此后您将获得一个异常(RecursionError您从第三个函数中看到的)。因此,一方面,您的代码可以按预期运行。您希望递归8181次,Python在1000后退出,因为这是默认限制。

如果您想更深入地递归,则可以使用sys.setrecursionlimit函数更改递归限制将递归限制设置为9000就足以使函数使用示例中给出的参数运行。

至于为什么Python只允许有限的递归深度,这主要是因为很少需要更多的递归。在大多数情况下,递归的效率要比迭代低得多,所以您通常不希望对大问题使用深度递归,因为它会非常慢。在大多数情况下,您达到了递归限制,这是因为有一个错误使原本应该由浅到深的递归变成了无限递归,而Python通过停止程序而不是让它永远继续下去,做了正确的事情。 。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章