python
网站首页 |   



  • [python编程习题] 递归函数解:喝啤酒、空瓶与盖子兑换的问题.
  • 发布: 江湖程序员 来源: 本站原创 时间: 2015/02/09 11:20
    (972) 点赞: (39) 标签: python编程习题


    问题描述:
    点击图片查看原图:
    """
    #推衍步骤:
    20元买20瓶            计20瓶 --> 20空瓶,20瓶盖
    20空瓶=10瓶 20瓶盖=5瓶 计15瓶 --> 15空瓶,15瓶盖
    15空瓶=7瓶  15瓶盖=3瓶 计10瓶 --> 10空瓶,10瓶盖 + 余1空瓶,3瓶盖
    11空瓶=5瓶  13瓶盖=3瓶 计8瓶  --> 8空瓶,8瓶盖  + 余1空瓶,1瓶盖  
    9空瓶=4瓶  9瓶盖=2瓶  计6瓶   --> 6空瓶,6瓶盖    + 余1空瓶,1瓶盖
    7空瓶=3瓶   7瓶盖=1瓶  计4瓶  --> 4空瓶,4瓶盖  + 余1空瓶,3瓶盖
    5空瓶=2瓶   7瓶盖=1瓶  计3瓶  --> 3空瓶,3瓶盖  + 余1空瓶,3瓶盖
    4空瓶=2瓶   6瓶盖=1瓶  计3瓶  --> 3空瓶,3瓶盖  + 余0空瓶,2瓶盖
    3空瓶=1瓶   5瓶盖=1瓶  计2瓶  --> 2空瓶,2瓶盖  + 余1空瓶,1瓶盖
    3空瓶=1瓶   3瓶盖=0瓶  计1瓶  --> 1空瓶,1瓶盖  + 余1空瓶,3瓶盖
    2空瓶=1瓶   4瓶盖=1瓶  计2瓶  --> 2空瓶,2瓶盖  + 余0空瓶,0瓶盖
    2空瓶=1瓶   2瓶盖=0瓶  计1瓶  --> 1空瓶,1瓶盖  + 余0空瓶,2瓶盖
    最后得75瓶余下1空瓶和3个瓶盖"""
    
    #python编程代码实现:
    def f(s,x,y):#依次是:(瓶,空瓶,盖子)
        print(s)
        x,x1 = divmod(x,2)#空瓶数与可兑换的数量(2)作求余运算,并返回商
        y,y1 = divmod(y,4)#瓶盖数与可兑换的数量(4)作求余运算,并返回商
        if x == 0 and y == 0 and x1 < 2 and y1 < 4:#判断递归终止的条件,即不足以继续兑换
            return s,x1,y1#输出答案(瓶,空瓶,盖子)
        else:
            return f(s+x+y,x1+x+y,y1+x+y)#将返回结果作为参数再回调函数
                         #依次返回的结果s+x+y  本身可以买到的瓶数(s)+空瓶兑换的瓶数(x)+瓶盖兑换的瓶数(y)
                         #             x1+x+y 记录当次兑换后所拥有的空瓶数量
                         #             y1+x+y 记录当次兑换后所拥有的瓶盖数量
        
    s = 20
    print(f(s,s,s,))
    

    ---= 已经到底 =---