我试图构建一个简单的代码,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
),例如,当我填写nilai
and时,所有这些代码都可以正常工作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] 删除。
我来说两句