鱼C论坛

 找回密码
 立即注册
查看: 1551|回复: 2

递归

[复制链接]
发表于 2023-10-8 14:38:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def money(ownmoney, moneylist, knownlist):
    if ownmoney in moneylist:
        knownlist[ownmoney] = 1
        return 1
    elif knownlist[ownmoney] > 0:
        return knownlist[ownmoney]
    else:
        min_coins = float('inf')  # 初始化最小硬币数为正无穷
        for each in [c for c in moneylist if c <= ownmoney]:
            numbercoin = 1 + money(ownmoney - each, moneylist, knownlist)

            min_coins = numbercoin
            if knownlist[min_coins] ==0:
                knownlist[ownmoney] = min_coins  # 将最小硬币数存储在knownlist中
    return min_coins



为什么用了min_coins就会不断更新最小硬币数的值,为什么最终返回的是整个递归过程中的最小硬币数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-8 14:38:49 | 显示全部楼层
在这段代码中,min_coins变量被用来记录当前递归过程中的最小硬币数。在每次递归调用中,我们计算使用每个硬币面值所需的硬币数,并将其与当前的最小硬币数进行比较。如果找到了更小的硬币数,就更新min_coins的值。

在递归过程中,每次递归调用都会返回一个最小硬币数。最终,整个递归过程中的最小硬币数会通过递归的返回值传递给调用者。这是因为在每次递归调用中,我们将最小硬币数存储在knownlist中,以便在后续的递归调用中可以直接使用。因此,最终返回的是整个递归过程中的最小硬币数。

总结一下,min_coins变量用于记录当前递归过程中的最小硬币数,而整个递归过程中的最小硬币数通过递归的返回值传递给调用者。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-8 18:29:08 | 显示全部楼层
在你提供的代码中,`min_coins` 变量的使用方式是不正确的。你没有在遍历过程中正确地更新 `min_coins`。你应该在找到更小的硬币数量时更新 `min_coins`。以下是修改后的代码:

def money(ownmoney, moneylist, knownlist):
    if ownmoney in moneylist:
        knownlist[ownmoney] = 1
        return 1
    elif knownlist[ownmoney] > 0:
        return knownlist[ownmoney]
    else:
        min_coins = float('inf')  # 初始化最小硬币数为正无穷
        for each in [c for c in moneylist if c <= ownmoney]:
            numbercoin = 1 + money(ownmoney - each, moneylist, knownlist)

            if numbercoin < min_coins:
                min_coins = numbercoin  # 更新最小硬币数量

        knownlist[ownmoney] = min_coins  # 将最小硬币数存储在knownlist中
    return min_coins

在这个修改后的代码中,我们在遍历过程中使用 `min_coins` 变量来存储当前找到的最小硬币数量。当我们找到一个更小的硬币数量(`numbercoin`)时,我们将 `min_coins` 更新为这个更小的值。这样,在遍历结束时,`min_coins` 将包含整个递归过程中找到的最小硬币数量。

在你提供的错误代码中,你直接将 `numbercoin` 的值赋给了 `min_coins`,而没有进行比较。这意味着 `min_coins` 变量实际上没有起到存储最小硬币数量的作用。因此,你得到的结果可能是错误的。

总之,正确使用 `min_coins` 变量可以确保你在整个递归过程中找到最小的硬币数量。在你提供的错误代码中,由于没有正确地使用 `min_coins` 变量,你可能得到错误的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 08:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表