[英]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) 如果:
这是我到目前为止所拥有的:
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,0
和return 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.