lwyuan源 发表于 2021-4-25 10:02:57

python递归函数麻烦帮忙写写这个小作业明天就要上交啊!!急!!!谢谢。

本帖最后由 lwyuan源 于 2021-4-25 11:43 编辑

练习:假设有面值为1元、2元、5元的货币,每种面值货币的数量分别为a、b、c (a、b、 c大于或等于0)
计算:当1*a+2*b+5*c=94时, a+b+c的最小值,最后分别输出a、b、c和a+b+c的值。 要求用递归函数完成!

lwyuan源 发表于 2021-4-25 10:31:11

帮忙写一下。明天就要上交啊。

qq1151985918 发表于 2021-4-25 11:02:48

本帖最后由 qq1151985918 于 2021-4-25 11:31 编辑

你这题确定是a,b,c>0 吗?是 abc均要求大于0还是只有c要求大于0?或者是你别是落下了等于?难道不该是abc均要求大于等于0吗?我跟你说,这可是天差地别的事。建议你把原题看仔细。
举个例子,如果要求中没有等于0,请问6元怎么分配?7元怎么分配?4元又怎么分配?2元和1元呢?

既然不回复那就算了,就当你给的题目正确吧,不过代码正确与否自己分析吧
def fun(rmb):
    num = 0
    if rmb == 1:
      return 1
    if rmb > 5 :
      return num + 1 + fun(rmb - 5)
    elif rmb > 2:
      return num + 1 + fun(rmb - 2)
    else:
      return num + 1 + fun(rmb - 1)

lwyuan源 发表于 2021-4-25 11:35:02

对,abc大于或等于0

lwyuan源 发表于 2021-4-25 11:35:55

重新帮我修改下吧。谢谢。

lwyuan源 发表于 2021-4-25 11:39:38

qq1151985918 发表于 2021-4-25 11:02
你这题确定是a,b,c>0 吗?是 abc均要求大于0还是只有c要求大于0?或者是你别是落下了等于?难道不该是abc均 ...

是abc大于或等于0,帮忙修改下答案。谢谢了。

lwyuan源 发表于 2021-4-25 11:49:47

答案求完整点。新人表示一点都不会。只为交个作业。

lwyuan源 发表于 2021-4-25 11:55:28

qq1151985918 发表于 2021-4-25 11:02
你这题确定是a,b,c>0 吗?是 abc均要求大于0还是只有c要求大于0?或者是你别是落下了等于?难道不该是abc均 ...

大哥,还在吗?可以重新帮我做一下吗?麻烦了。

qq1151985918 发表于 2021-4-25 12:47:53

本帖最后由 qq1151985918 于 2021-4-25 13:04 编辑

lwyuan源 发表于 2021-4-25 11:55
大哥,还在吗?可以重新帮我做一下吗?麻烦了。

def add_list(list1: list, list2: list, long: "int >= 0" = 3) -> list:
    return + list2 for i in range(long)]

def fun(rmb: "int >= 0" = 0) -> list:
    if rmb in :
      return
    if rmb >= 5 :
      return add_list(, fun(rmb - 5))
    if rmb >= 2:
      return add_list(, fun(rmb - 2))

lwyuan源 发表于 2021-4-25 12:54:38

qq1151985918 发表于 2021-4-25 12:47


谢谢。

江湖散人 发表于 2021-4-25 14:42:42

qq1151985918 发表于 2021-4-25 12:47


你这个代码有点难啊,看不懂

江湖散人 发表于 2021-4-25 14:45:18

def sumix():
    mix=[]
    for a in range(94):
      for b in range(47):
            for c in range(18):
                if (a * 1 + b * 2 + c * 5) == 94:
                  sum=a+b+c
                  mix.append(sum)
    for i in range(len(mix)-1):
      if mix<=mix:
            t=mix
            mix=mix
            mix=t
            i+=1
    return mix


print(sumix())

我这个只能算出最小值,但是不会用递归,我也是小白,刚学的!

qq1151985918 发表于 2021-4-25 15:03:10

江湖散人 发表于 2021-4-25 14:42
你这个代码有点难啊,看不懂

难则不会,会则不难。我先说一下代码原理

比如说 我们想拼凑出 10 元钱,那么用5块只需要2张,2块需要5张,1块就需要10张,所以说,要想最后用的张数最少,则应该优先使用大面额的5块钱,次用中面额的2元,最后才用1元,其实这问题如果不用递归那么谁都会做,比如说 94
我们需要用 94//5 == 18 张5,剩 94%5 == 4 要用4//2 == 2张2,剩4%2 == 0则用 0//1张 1
其实算到最后已经不用算了,因为4%2 只会是1 或者 0这就是第一个 if rmb in 的由来

然后就是要有几张5几张2的问题了,其实2不会超过2张,因为 任何数 n % 5 都不会大于 4 ,不知道我说的是不是清楚,但是要用递归来写就只能 5块5块一次拿出1张,否则一次拿出18张就不需要递归了,算2也是同样的道理

这里需要注意的是,这几个 if ,如果理不清就用 ifelif else,如果全部用 if 一定要注意先后顺序,因为满足 if rmb >= 5就一定满足if rmb >= 2 ,顺序错了那结果就错了

江湖散人 发表于 2021-4-25 16:08:53

qq1151985918 发表于 2021-4-25 15:03
难则不会,会则不难。我先说一下代码原理

比如说 我们想拼凑出 10 元钱,那么用5块只需要2张,2块需要 ...

真的是会者不难,我都听不懂。
还得继续学习啊,小白就是小白,不懂的太多了

qq1151985918 发表于 2021-4-25 16:25:57

江湖散人 发表于 2021-4-25 16:08
真的是会者不难,我都听不懂。
还得继续学习啊,小白就是小白,不懂的太多了

没关系,多写就好了。另外我看了下你的代码,有点小问题。
for a in range(94):
      for b in range(47):
            for c in range(18):

我们知道,range的区间是左闭右开,比如 range(18)是取不到 18 的值的,所以应该记得 +1

lwyuan源 发表于 2021-4-25 18:39:55

qq1151985918 发表于 2021-4-25 15:03
难则不会,会则不难。我先说一下代码原理

比如说 我们想拼凑出 10 元钱,那么用5块只需要2张,2块需要 ...

大哥,为什么我运行出来,啥都没有?

qq1151985918 发表于 2021-4-25 19:13:38

本帖最后由 qq1151985918 于 2021-4-25 19:25 编辑

lwyuan源 发表于 2021-4-25 18:39
大哥,为什么我运行出来,啥都没有?

自己给运行函数自己赋值啊,这还要教?看来你学习可能1节课都没听,但凡听过一两节课也知道怎么做啊。我看你抓紧时间补习补习吧,要不老师提问你答不出来不全露馅了?

作业你直接交代码,不会给你算错误的。

代码最后加上
print("a, b, c 分别为", *fun(94))
print("a + b + c =", sum(fun(94)))

江湖散人 发表于 2021-4-26 08:40:13

qq1151985918 发表于 2021-4-25 16:25
没关系,多写就好了。另外我看了下你的代码,有点小问题。




哦,你不说我还真忘记了,谢谢啊

lwyuan源 发表于 2021-4-26 14:48:02

qq1151985918 发表于 2021-4-25 19:13
自己给运行函数自己赋值啊,这还要教?看来你学习可能1节课都没听,但凡听过一两节课也知道怎么做啊。 ...

为什么还是显示不出来。{:10_266:}

qq1151985918 发表于 2021-4-26 14:57:06

lwyuan源 发表于 2021-4-26 14:48
为什么还是显示不出来。

兄弟,别嫌我说话直,赶紧转专业吧。给了答案都不会抄你还学什么?一节课都没听过说明你起码对这个专业没兴趣,要趁早!
页: [1] 2
查看完整版本: python递归函数麻烦帮忙写写这个小作业明天就要上交啊!!急!!!谢谢。