【发布时间】:2019-04-03 02:56:19
【问题描述】:
这是一个被称为“邮票问题”的数学问题。您需要在信封上放置一定数量的邮资(amount)。 信封上只有 n 个邮票的空间(但没有更多)。
有一个可用面额的邮票列表(面额)。您可以根据需要使用尽可能多的每种面额。目标是使用 面额 和有限的 n 个邮票获得所需的数量。
例如,金额 =12,n =3,面额 => 5+5+2。但是你根本无法使 amount =17。
我怎样才能递归解决这个问题?
我已经能够确定基本情况。例如,当你超过价值限制,或者你没有地方可以盖章时,这些都是失败的尝试,当你达到目标时,这是一个应该返回 true 的积极尝试。 递归的诀窍是找到所有可能组合的总和。
Java 中的算法或代码的轻微提示将不胜感激。
【问题讨论】:
-
你可以尝试一下吗?
-
使用永久邮票。
-
@TerryDorsey 我能够确定基本情况。例如,当你超过价值限制,或者你没有地方可以盖章时,这些都是失败的尝试,当你达到目标时,这是一个应该返回 true 的积极尝试。递归的诀窍是找到所有可能组合的总和
-
如果你第一次尝试拿一个 9-stamp 剩下的可以看作是新的简化问题
amount=3, n=2。 -
另外,“you could not make amount =17”实际上是错误。两张 9 美分的邮票。您多付了 1 美分,但那只是两张邮票,邮政部门会很乐意接受您的多付。
标签: java algorithm recursion discrete-mathematics