jy01388519 发表于 2020-6-4 19:59:00

递归问题求助,23,24讲的课后习题

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

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

虽然知道这种解题方式有误,但实在是不明白这种解题的结果为啥是,已经困扰一整天咯,求大神帮忙

Twilight6 发表于 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 =

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

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



听风夜雨 发表于 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))

jia159753 发表于 2020-6-4 20:28:25

学习

伍圆 发表于 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)

小甲鱼的铁粉 发表于 2020-6-4 20:57:06

向大佬们学习

jy01388519 发表于 2020-6-4 21:03:45

感谢各位向大佬们,已经懂了99.99%了

伍圆 发表于 2020-6-4 21:14:26

https://www.cnblogs.com/vamei/archive/2012/07/10/2582795.html
这篇博客有讲这个动态类型,建议可以看看

Twilight6 发表于 2020-6-4 22:43:14

jy01388519 发表于 2020-6-4 21:03
感谢各位向大佬们,已经懂了99.99%了

哈哈哈哈   你这....很行

Stubborn 发表于 2020-6-4 23:20:07

Twilight6 发表于 2020-6-4 22:43
哈哈哈哈   你这....很行

你忘记要最佳了{:10_323:}{:10_303:}

Twilight6 发表于 2020-6-5 08:38:08

Stubborn 发表于 2020-6-4 23:20
你忘记要最佳了

{:10_297:}我现在比较想开了
页: [1]
查看完整版本: 递归问题求助,23,24讲的课后习题