[英]How to Define a Recursive Function with 2 Arguments in Python
我的意思是定义以下递归函数
但是我不知道我的代码出了什么问题。 任何对Python有经验的人都可以看一下吗? 谢谢!
import scipy.special
def F(n,k):
if (k == 1):
F = 1
else:
F = 0
j = 1
while (j <= n-k+1):
a = scipy.special.binom(n,j)
b = F(n-j,k-1)
F = F + a*b
j = j + 1
return F
您需要这样的东西:
import scipy.special
def F(n,k):
if (k == 1):
return 1
else:
return sum(scipy.special.binom(n,j) * F(n-j,k-1) for j in range(1, n-k+2))
在代码中,您将重新分配给F(您将其定义为函数( def F(n,k)
)),该值是int的值( F = 1
)。 这样,当值k大于1时,会出现以下错误:
b = F(n-j,k-1)
TypeError: 'int' object is not callable
因为现在F是一个int,不再是一个函数
@ArielLeung的code
的问题在于,它同时定义了函数F(n,k)
和将返回的变量F
为F
这会在变量名称空间中造成歧义。
以下应该可以正常工作。
import scipy.special
def F(n,k):
f = 0
if (k == 1):
f = 1
else:
f = 0
j = 1
while (j <= n-k+1):
a = scipy.special.binom(n,j)
b = F(n-j,k-1)
f = f + a*b
j = j + 1
return f
但是,我希望@Nikaidoh的列表理解是一种非常简洁的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.