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