具有2的幂的递归硬币更换(分区)

问题描述 投票:1回答:1

问题:Count_Change

一旦机器接管,每个硬币的面额将是2的幂:1美分,2美分,4美分,8美分,16美分等。对多少币没有限制一枚硬币值得。

给定一个正整数,如果硬币的价值之和为数量,则一组硬币会改变数量。例如,以下设置对7进行了更改:

7 1-cent coins
5 1-cent, 1 2-cent coins
3 1-cent, 2 2-cent coins
3 1-cent, 1 4-cent coins
1 1-cent, 3 2-cent coins
1 1-cent, 1 2-cent, 1 4-cent coins

因此,有7种方法可以进行7种找零。编写一个递归函数count_change,它需要一个正整数,并返回将来使用这些硬币进行数量找零的方法。

样品运行;

def count_change(amount):
    """Return the number of ways to make change for amount.

    >>> count_change(7)
    6
    >>> count_change(10)
    14
    >>> count_change(20)
    60
    >>> count_change(100)
    9828
    >>> from construct_check import check
    >>> # ban iteration
    >>> check(HW_SOURCE_FILE, 'count_change', ['While', 'For'])
    True

我的代码:

def largestPart(k):
        if k <= 1:
            return 0
        else:
            i = 1
            while i < k:
                i = 2 * i
        return i
    def partFunction(n,m):
        if n <= 0:
            return 0
        elif m <= 0:
            return 0
        elif n == 1:
            return 1
        elif m == 1:
            return 1
        return partFunction(n - m, m) + partFunction(n, m // 2)
    return partFunction(amount, largestPart(amount))

我的问题:当输入值n等于10时,返回值假定为14,但是我一直得到10作为返回值。谁能告诉我为什么我得到10?非常感谢您的帮助!

recursion
1个回答
0
投票

如果n等于零,则partFunction应该返回1。

© www.soinside.com 2019 - 2024. All rights reserved.