鱼C论坛

 找回密码
 立即注册
查看: 3648|回复: 21

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

[复制链接]
发表于 2021-4-25 10:02:57 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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的值。 要求用递归函数完成!
最佳答案
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 [list1[i] + list2[i] for i in range(long)]

def fun(rmb: "int >= 0" = 0) -> list:
    if rmb in [0, 1]:
        return [rmb, 0, 0]
    if rmb >= 5 :
        return add_list([0, 0, 1], fun(rmb - 5))
    if rmb >= 2:
        return add_list([0, 1, 0], fun(rmb - 2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-25 10:31:11 From FishC Mobile | 显示全部楼层
帮忙写一下。明天就要上交啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-25 11:02:48 From FishC Mobile | 显示全部楼层
本帖最后由 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-25 11:35:02 From FishC Mobile | 显示全部楼层
对,abc大于或等于0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-25 11:35:55 From FishC Mobile | 显示全部楼层
重新帮我修改下吧。谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-25 11:39:38 From FishC Mobile | 显示全部楼层
qq1151985918 发表于 2021-4-25 11:02
你这题确定是a,b,c>0 吗?是 abc均要求大于0还是只有c要求大于0?或者是你别是落下了等于?难道不该是abc均 ...

是abc大于或等于0,帮忙修改下答案。谢谢了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-25 11:49:47 From FishC Mobile | 显示全部楼层
答案求完整点。新人表示一点都不会。只为交个作业。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-25 11:55:28 From FishC Mobile | 显示全部楼层
qq1151985918 发表于 2021-4-25 11:02
你这题确定是a,b,c>0 吗?是 abc均要求大于0还是只有c要求大于0?或者是你别是落下了等于?难道不该是abc均 ...

大哥,还在吗?可以重新帮我做一下吗?麻烦了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 [list1[i] + list2[i] for i in range(long)]

def fun(rmb: "int >= 0" = 0) -> list:
    if rmb in [0, 1]:
        return [rmb, 0, 0]
    if rmb >= 5 :
        return add_list([0, 0, 1], fun(rmb - 5))
    if rmb >= 2:
        return add_list([0, 1, 0], fun(rmb - 2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-25 12:54:38 From FishC Mobile | 显示全部楼层
qq1151985918 发表于 2021-4-25 12:47

谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-4-25 14:42:42 | 显示全部楼层

你这个代码有点难啊,看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i]<=mix[i+1]:
            t=mix[i]
            mix[i]=mix[i+1]
            mix[i+1]=t
            i+=1
    return mix[i]


print(sumix())

我这个只能算出最小值,但是不会用递归,我也是小白,刚学的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 [0, 1]的由来

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

这里需要注意的是,这几个 if ,如果理不清就用 if  elif else,如果全部用 if 一定要注意先后顺序,因为满足 if rmb >= 5就一定满足  if rmb >= 2 ,顺序错了那结果就错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-25 16:08:53 | 显示全部楼层
qq1151985918 发表于 2021-4-25 15:03
难则不会,会则不难。我先说一下代码原理

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

真的是会者不难,我都听不懂。
还得继续学习啊,小白就是小白,不懂的太多了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-25 18:39:55 From FishC Mobile | 显示全部楼层
qq1151985918 发表于 2021-4-25 15:03
难则不会,会则不难。我先说一下代码原理

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

大哥,为什么我运行出来,啥都没有?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-25 19:13:38 From FishC Mobile | 显示全部楼层
本帖最后由 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)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-26 08:40:13 | 显示全部楼层
qq1151985918 发表于 2021-4-25 16:25
没关系,多写就好了。另外我看了下你的代码,有点小问题。

哦,你不说我还真忘记了,谢谢啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-26 14:48:02 From FishC Mobile | 显示全部楼层
qq1151985918 发表于 2021-4-25 19:13
自己给运行函数自己赋值啊,这还要教?看来你学习可能1节课都没听,但凡听过一两节课也知道怎么做啊。 ...

为什么还是显示不出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-26 14:57:06 | 显示全部楼层
lwyuan源 发表于 2021-4-26 14:48
为什么还是显示不出来。

兄弟,别嫌我说话直,赶紧转专业吧。给了答案都不会抄你还学什么?一节课都没听过说明你起码对这个专业没兴趣,要趁早!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 00:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表