簡體   English   中英

如何在Python中使用2個參數定義遞歸函數

[英]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)和將返回的變量FF 這會在變量名稱空間中造成歧義。

以下應該可以正常工作。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM