我正在看麻省理工学院开放式课程2008计算机科学和编程导论,并试着做作业(job).这是非正式的,所以不涉及评分.有一个问题,你必须购买特定数量的金块,包装包含6个、9个和20个金块.其目的是学习如何在Python中使用递归.我要解决多达65个掘金的问题.

我已经编写了下面的代码.它有点管用,但问题是,我输入的每个数字都只有一个解决方案.我如何确保我得到了每个掘金总数的所有可能的组合?

def testtheorem(x):
    for a in range(0,15):
        for b in range(0,15):
            for c in range(0,15):
                y = 6*a + 9*b + 20*c
                if y == x and x < 66:
                    print ("For", int(x), "total;")
                    print ("6 piece can be", int(a))
                    print ("9 piece can be", int(b))
                    print ("20 piece can be", int(c))
                    testtheorem(x+1)
                    return

推荐答案

根据gog的 comments ,我快速回答了这个问题.

您输入的每个答案只能得到一个答案的原因是您过早地返回了答案.

每次找到第一个答案时,都会创建一个新的子函数,并在这个数字中查找答案. 最终,你会活到66岁,永远不会有答案.然后你开始往回走,一直走到顶端--你的输入数字.

我举了一个从64开始的小例子:

enter image description here

为了解决这个问题,你需要改变你在函数中调用递归函数的位置以及返回的时间.

除此之外,您的代码在正确的轨道上.

Python相关问答推荐

如何推迟对没有公钥的视图/表的反射?

使用子字符串动态更新Python DataFrame中的列

为什么我的主页不会重定向到详细视图(Django)

Python中的锁定类和线程以实现dict移动

Snap 7- read_Area用于类似地址的变量

计算相同形状的两个张量的SSE损失

如何在Python中使用io.BytesIO写入现有缓冲区?

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

理解Python的二分库:澄清bisect_left的使用

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

2D空间中的反旋算法

更改键盘按钮进入'

加速Python循环

使用setuptools pyproject.toml和自定义目录树构建PyPi包

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

梯度下降:简化要素集的运行时间比原始要素集长

如何合并两个列表,并获得每个索引值最高的列表名称?

在两极中过滤

在代码执行后关闭ChromeDriver窗口