一件物品花费1美元,当我们返回3件物品的包装时,我们又得到一件物品。 例如:如果我们有15美元,我们可以买22件物品
我可以写一个程序来计算nr。物品可以用n美元购买。但是如何使用递归关系来解决它?
答案 0 :(得分:1)
假设你不能退回包装,你会用n美元购买n件商品。现在,由于返回包装器,你会得到多少?在第一次迭代中,您将获得(n / 3)更多项目,并且在使用这些项目之后,您将拥有(n%3)+(n / 3)个包装器(不要忘记n%3 - 您可能没有返回所有包装器)。现在从(n%3)+(n / 3)项中返回包装器可以获得多少项?表示m =(n%3)+(n / 3),然后得到(m%3)+(m / 3)。然后你可以从这些项目中继续返回包装器等等。让我们用 0 = n来表示你在第一次购买后拥有的包装数量,然后用 i + 1 表示返回后你将拥有的包装数量来自 i 的包装器。然后你会有一个 i + 1 = a i %3 +一个 i / 3这是你的递归关系。
请注意, i 表示每次迭代后您拥有的包装数量,但添加数字 i 将不会产生您获得的项目总数但会更多(这是因为额外的 i %3)。在实施解决方案时,您必须注意这一点。
答案 1 :(得分:0)
@Ivaylo,谢谢你的提示。我一直在寻找优雅的递归关系。我希望我能得到它。 count(n,n)的调用是必需的解决方案。
#w_l : Wrappers left after each iteration
#cnt_items: Total Count of of items got after each iteration
count(w_l,cnt_items) = count(w_l/3+w_l%3,cnt_items+w_l/3)#wl >= 3
= cnt_items #w_l <3