一年的五分之四 2023-06-03 12:52 采纳率: 90%
浏览 31
已结题

python 递归调用极min()函数

想请教一下各位网页 这串代码是怎么一步步运行的!

def minbag(n):
    if n > 1:
        if n == 2 or n == 3 or n == 5:
            return 1
        else:
            smallest = minbag(n-2)
            if n > 4:
                smallest = min(smallest, minbag(n-3))
            if n > 6:
                smallest = min(smallest, minbag(n-5))
        return 1 + smallest
    else:
        return 0

  • 写回答

4条回答 默认 最新

  • 卑微的Coder 2023-06-03 13:03
    关注

    首先判断n的大小,如果它大于1,则继续执行,否则返回0
    如果n等于2、3或5,则直接返回1(因为此时组成n的最小数字集合只有1个数字)
    否则,找到组成数字n的最小数字集合所需的最小数字数目
    首先,找到组成n-2的最小数字集合所需的最小数字数目,存入变量smallest
    如果n大于4,则再找到组成n-3的最小数字集合所需的最小数字数目,并且与smallest取较小值
    如果n大于6,则再找到组成n-5的最小数字集合所需的最小数字数目,并且与smallest取较小值
    最后在所需数字数量的基础上加上1,因为我们加入了一个数字,即数字2、3或5
    举个例子,当输入参数n=11时: 首先,在满足n > 1的条件下执行代码。接下来,执行如下步骤:

    n不等于2、3或5,继续执行
    执行minbag(n-2),即minbag(9),此时smallest为3,因为最小组合为2 + 2 + 5
    n大于4,继续执行
    执行minbag(n-3),即minbag(8),此时smallest为2,因为最小组合为2 + 3 + 3的形式,比3 + 2 + 2更优
    n大于6,继续执行
    执行minbag(n-5),即minbag(6),此时smallest为2,因为最小组合为2 + 2 + 2,比5 + 2更优
    返回最小数字数目1+2=3,即组成数字11的最小数字集合为2 + 3 + 3.
    最终,minbag函数返回的是一个整数,表示组成数字n的最小数字集合所需的最小数字数目。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月10日
  • 已采纳回答 11月2日
  • 创建了问题 6月3日

悬赏问题

  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程