吃鲸不放辣 发表于 2020-6-7 22:42:03

第24讲第二题

各位大佬,代码如下:
def get_digits(n):
        result=[]
        if n>0:
                get_digits(n//10)                        #为什么递归时 result 没有重新被赋值成空集?!
                return result.insert(0,n%10)
        else:
                return result

print(get_digits(123456))

输出结果:

Twilight6 发表于 2020-6-7 23:09:36

本帖最后由 Twilight6 于 2020-6-7 23:12 编辑

代码错了吧,要改成这样,而且输出结果是倒叙的列表,不是 1,2,3,4,5,6 哦

你返回的是result.insert(0, n % 10) ,而列表的方法大部分都没有返回值,也就是只会返回一个None
result = []
def get_digits(n):

    if n > 0:
      get_digits(n // 10)
      result.insert(0, n % 10)
      return result
    else:
      return result

print(get_digits(123456))


容器类的值只要不对容器本身进行改变,可以直接将元素加入容器内

但是注意不能对本身进行改变,如函数内对result重新赋值为一个列表

吃鲸不放辣 发表于 2020-6-8 19:54:47

Twilight6 发表于 2020-6-7 23:09
代码错了吧,要改成这样,而且输出结果是倒叙的列表,不是 1,2,3,4,5,6 哦

你返回的是result.insert(0 ...

大佬你再看下,这次用字符串为什么return get_digits(n//10)+str(n%10) 时result 没有被重新被赋值为空字符串
>>> def get_digits(n):
      result=''
      if n>0:
               return get_digits(n//10)+str(n%10)
      else:
                return result

      
>>> get_digits(123456)
'123456'

Twilight6 发表于 2020-6-8 19:57:43

吃鲸不放辣 发表于 2020-6-8 19:54
大佬你再看下,这次用字符串为什么return get_digits(n//10)+str(n%10) 时result 没有被重新被赋值为空 ...

不他每次递归确实被重新赋值成空字符串了,只是递归返回时候用 + 号拼接上之前的结果一起返回
所以每次递归的结果都拼接上返回最后的完整字符串
页: [1]
查看完整版本: 第24讲第二题