如何解决如何防止在 Python 中实现阶乘的递归错误
我正在开发一个数学套件,目前在实现阶乘函数的递归版本时遇到了问题。问题是当我在贝叶斯组合函数中使用它时:
C(n,k) = n! / k! * (n-k)!
我已经独立对其进行了测试,它可以正常工作,但是一旦我将它放入我的组合函数中,我就会收到错误 Recursion Error: maximum recursion depth exceeded in comparison
,即使 n 和 k 的值非常小。>
我已经实现了一个完美运行的迭代解决方案,那么为什么我不断收到递归错误?
这是递归实现:
def factorial(n):
if n == 1 or n == 0:
return n
else:
return n * factorial(n - 1)
这是迭代实现:
def factorial(n):
result = 1
for i in range(1,n+1):
result *= i
return result
它们在组合函数中使用如下:
def combination(n,k):
result = factorial(n) / (factorial(k) * factorial(n - k))
return result
递归函数似乎只有在 k = 1 时才起作用。
combination(2,1) = 2
combination(2,2) =
Traceback (most recent call last):
File "baysian.py",line 44,in <module>
answer = combination(n,k)
File "baysian.py",line 18,in combination
result = factorial(n) / (factorial(k) * factorial(n - k))
File "baysian.py",line 9,in factorial
return n * factorial(n - 1)
File "baysian.py",in factorial
return n * factorial(n - 1)
[PrevIoUs line repeated 994 more times]
File "baysian.py",line 6,in factorial
if n == 1:
RecursionError: maximum recursion depth exceeded in comparison
解决方法
来自 this 页:
import sys
print(sys.getrecursionlimit())
然后调整:
sys.setrecursionlimit(<number>)
如果输入的数字太大会导致机器崩溃
,事实证明我的递归阶乘实现是不正确的。它会为 !0 返回 0 而不是 1。我添加了一些更改,现在它可以工作了。这是我修改后的解决方案。
def factorial(n):
if n == 1:
return n
elif n == 0:
return 1
else:
return n * factorial(n - 1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。