繁体   English   中英

使用递归编写 n 选择 k function:返回作为元组进行的递归调用的值和数量

[英]Writing an n choose k function using recursion: returning the value and number of recursive calls made as a tuple

我需要定义这个 function n_choose_k(n,k) ,它返回 n 选择 k 的值和作为元组进行的递归调用的数量,同时记住以下几点:

递归调用的次数不应包括初始的 function 调用。

function 返回 (-1,0) 如果:

  • k 为负
  • n 为负
  • n 小于 k

这是我到目前为止所拥有的:

def n_choose_k(n, k):
    if k == 0 or k == n:
        return 1,0
    
    elif n < k or k < 0 or n < 0:
        return -1,0
    
    return n_choose_k(n-1,k) + n_choose_k(n-1, k-1)


    >>> print(n_choose_k(5,2))
    (10, 18) ---> Expected
    (1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0) ---> Getting

您的问题在于行return 1,0return n_choose_k(n-1,k) + n_choose_k(n-1, k-1) Python 列表(在这种情况下您可以这样认为)在您添加它们时被附加。 例如

>>> [1,2,3] + [3,4]
[1, 2, 3, 3, 4]

所以在这种情况下,你所有的1,0都被加在一起。 (如果从输入总数 20 中排除初始 function 调用值 2,您应该得到所需的 18 作为递归调用数)。

我希望您认为这发生在 Python 中。

# INCORRECT, FALSE Python
>>> [1,2,3] + [3,4,5]
[4,6,8]

如果您使用的是 Numpy arrays,这可以工作

# With Numpy
>>> import numpy as np
>>> np.array([1,2,3]) + np.array([3,4,5])
np.array([4,6,8])

所以你有选择,要么修改你的代码,使你的递归不在 append 列表中,要么使用 Numpy。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM