繁体   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