鱼C论坛

 找回密码
 立即注册
查看: 870|回复: 10

[已解决]递归问题求助,23,24讲的课后习题

[复制链接]
发表于 2020-6-4 19:59:00 | 显示全部楼层 |阅读模式

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

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

x
1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==> [1, 2, 3, 4, 5]

list1 = []
def get(x):  
    if x > 0:
        list1.append(x%10)
        return list1 + get(x//10)
    else:
        return []
print(get(23))

虽然知道这种解题方式有误,但实在是不明白这种解题的结果为啥是[3,2,3,2],已经困扰一整天咯,求大神帮忙
最佳答案
2020-6-4 20:14:36
本帖最后由 Twilight6 于 2020-6-4 20:22 编辑

递归过程中也会 返回 list1 两次相加 导致一个函数总共加了两次 列表list1
list1 = []
def get(x):
    if x > 0:
        list1.append(x%10)    # 第一次未递归 23 % 10 = 3 加入列表中  # 第一次递归 2%10= 2 再次加入列表

        return list1 + get(x//10)  #   开始进入第一次递归 x//10=2 则递归get(2) 此时list1 = [3]

    # 开始进入第二次递归,此时 2//10 = 0 执行递归 get(0) 则返回[] 此时列表 list = [3,2]
    
    # 第二次递归结束后 返回 get(0) -> get(2) -> get(23)
    
    # 分别的返回值是        []   ->   list1+get(0) -> list1 + get(2)  所以 这里的 list1 加了两次

    else:
        return []
print(get(23))



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-4 20:14:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-6-4 20:22 编辑

递归过程中也会 返回 list1 两次相加 导致一个函数总共加了两次 列表list1
list1 = []
def get(x):
    if x > 0:
        list1.append(x%10)    # 第一次未递归 23 % 10 = 3 加入列表中  # 第一次递归 2%10= 2 再次加入列表

        return list1 + get(x//10)  #   开始进入第一次递归 x//10=2 则递归get(2) 此时list1 = [3]

    # 开始进入第二次递归,此时 2//10 = 0 执行递归 get(0) 则返回[] 此时列表 list = [3,2]
    
    # 第二次递归结束后 返回 get(0) -> get(2) -> get(23)
    
    # 分别的返回值是        []   ->   list1+get(0) -> list1 + get(2)  所以 这里的 list1 加了两次

    else:
        return []
print(get(23))



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

使用道具 举报

发表于 2020-6-4 20:20:53 | 显示全部楼层
建议
list1 = []
def get(x):  
    if x > 0:
        list1.append(x%10)
        return get(x//10)
    else:
        return list1[::-1]
print(get(3425614))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-4 20:28:25 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-4 20:47:21 | 显示全部楼层
本帖最后由 伍圆 于 2020-6-4 20:55 编辑

试了下可以这样
def get(x):  
    if x > 0:
        list1 = []
        list1.append(x%10)
        return list1 + get(x//10)
    else:
        return []
s = get(23)
s.reverse()
print(s)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-4 20:57:06 | 显示全部楼层
向大佬们学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-4 21:03:45 | 显示全部楼层
感谢各位向大佬们,已经懂了99.99%了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 21:14:26 | 显示全部楼层
https://www.cnblogs.com/vamei/archive/2012/07/10/2582795.html
这篇博客有讲这个动态类型,建议可以看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 22:43:14 | 显示全部楼层
jy01388519 发表于 2020-6-4 21:03
感谢各位向大佬们,已经懂了99.99%了

哈哈哈哈   你这....很行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 23:20:07 | 显示全部楼层
Twilight6 发表于 2020-6-4 22:43
哈哈哈哈   你这....很行

你忘记要最佳了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-5 08:38:08 | 显示全部楼层
Stubborn 发表于 2020-6-4 23:20
你忘记要最佳了

我现在比较想开了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 22:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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