簡體   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