• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

邮票拼图

python 来源:88jerry88 9次浏览

我的老师给了我一套问题,让我们考虑递归。其中之一,我们被赋予一个价值(邮资的成本)和一个可用的邮票列表。该练习涉及编写一个递归函数,该函数返回邮票的最小长度列表,其总数等于邮资的总和值。邮票拼图

解决这个问题的正确方法就是让程序比较每一种可能性并返回最小长度的程序。如果是这种情况,我不确定如何为它编写程序,更不用说使用递归,因为我一般都是Python和编程的新手。根据教师提供的线索,我想出了这样的事情:

stampList=[1,4,7] 
postage=10 

def pickStamps(postage): 
    if postage==0: #base case 1 
     return "" 
    if postage<0: #base case 2 
     return none 
    else: 
     x=postage 
     for i in range(len(stampList)-1): 
     x=x-stampList[i] 
     return pickStamps(x) 

我试图有蟒蛇开始邮资的价值,减去结合每种面额才能到零,但我不确定如何将每种可能性都列入清单。在问题中提出,编写另一个函数可能是明智的,该函数接受一个列表列表的参数,并返回列表中最小长度元素的索引,但我不确定如何实现该列表。有人能告诉我如何编写这样的代码或解释解决这个问题的最佳方法吗?谢谢!


===========解决方案如下:

试想一下,你有已经工作的功能:

def pick_stamps(postage): 
    '''Returns list of stamps needed to cover postage''' 

鉴于你有这个功能,你可以用它来实现您的版本:

def my_pick_stamps(postage): 
    if postage == 0: 
     return [] 
    else: 
     stamp = max(stamp for stamp in stamps 
        if stamp <= postage) 
     return [stamp] + pick_stamps(postage - stamp) 

当然,一旦你实现你可以使用你的版本,并用my_pick_stamps代替pick_stamps


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)