[英]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.