簡體   English   中英

Python代碼 - 我卡住了 - 遞歸

[英]Python code - I'm stuck - recursion

我需要一些幫助,因為我覺得我迷路了。 我之前在這個網站上搜索過,當然我已經谷歌了,但請相信我,如果它對我來說這么簡單,我根本就沒有問過,所以請善待我。 我是python的新手,編碼對我來說並不容易。

無論如何,看看我的代碼:

def coin_problem(price, cash_coins):
    if (price < 0):
        return []
    if (price == 0):
        return [[]]

    options = []

    for a_coin in cash_coins:
        coins_minus_coin = cash_coins[:]
        coins_minus_coin.remove(a_coin)
        sub_coin_problem = coin_problem (price - a_coin, cash_coins)
        for coin in sub_coin_problem:
            coin.append(a_coin)
        options.extend(sub_coin_problem)

    return options

print coin_problem(4, [1, 2])

正如你所看到的,我試圖通過遞歸處理着名的硬幣問題(正如我之前寫的,我知道很多人已經問過這個問題,我讀了他們的問題和答案,但我仍然無法完全理解解決方案)。

這段代碼是由我完成的。 現在我陷入了困境。 當“price”的值為4且“cash_coins”的值為[1,2]而不是返回這樣的值時:

[1,1,1,1]
[2,2]
[2,1,1]

我得到的更像是:

[[1, 1, 1, 1], [2, 1, 1], [1, 2, 1], [1, 1, 2], [2, 2]]

“2”和雙“1”的組合重復3次而不是“1”。 我不知道我該怎么做才能解決問題或改進我的代碼以便它能更好地工作。

如果要將單個項目添加到列表中,請使用append 如果要將兩個列表組合在一起,請使用extend

提示:

    coins_minus_coin = cash_coins[:]
    coins_minus_coin.remove(coin)

你永遠不會使用這個變量。

    for i in sub_coins:
        i.append(coin)
    cash_coins_options.append(sub_coins)

你也從不使用i 我猜你的意思是:

    for i in sub_coins:
        i.append(coin)
        cash_coins_options.append(i)

這解決了stange結果的問題,但你的解決方案仍然只能找到[] 為什么? 你的遞歸只能在return []上停止; 當你用一枚硬幣告訴價格時,它無法處理另一個基本情況。 嘗試在頂部添加這個簡單的條件:

# actually I changed my mind-
# I assume you're learning so try this one yourself :-)

這將使您的功能表現得更好:

>>> print coin_problem(4, [1,2])
[[2, 1, 1], [1, 2, 1], [2, 2]]

它設法產生正確的答案(即使它復制了其中一些)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM