Sungne_jer 发表于 2020-2-19 17:11:52

信任求助

课后作业:利用递归写一个函数get_digits(n),将参数n分解出每个数位的数字并按顺序存放到列表中,如get_digits(12345)——>
result = []
def get_digits(n):
    if n>0:
      result.insert(0,n%10)
      get_digits(n//10)
      #return result

get_digits(12345)
print(result)
问题是:为什么要把result定义在函数外面?试过定义在函数里面返回result,最后输出结果是,这是为什么?

dlnb526 发表于 2020-2-19 17:15:06

如果定义在函数里面,每次调用函数自己时result都会经历
result = []
即重新被初始化为空数组。

希望能帮到您!

qiuyouzhi 发表于 2020-2-19 17:16:00

我是必须放在外边,不然就会报错

°蓝鲤歌蓝 发表于 2020-2-19 17:23:23

本帖最后由 °蓝鲤歌蓝 于 2020-2-19 17:25 编辑

你的这个递归函数是为了把每一步运行出来的 数字 放入 同一个 列表中。
而你把 result = [] 写里面的话, 每一步运行出来的 数字 放入的都是一个 新的列表
例如: get_digits(n) 放了个 , get_digits(n//10) 则放了个 , get_digits(n//10//10) 则放了个 ,它们放的列表不是同一个,因为你在函数里最开始将 result = [] 了, 每个步骤算出来的数字都放在了自己那步的函数定义的 result 里。
也就是说, get_digits(12345) 运行完之后,你以为只是用了一个 result ,其实是使用了 5 个 result。

Sungne_jer 发表于 2020-2-19 17:46:53

°蓝鲤歌蓝 发表于 2020-2-19 17:23
你的这个递归函数是为了把每一步运行出来的 数字 放入 同一个 列表中。
而你把 result = [] 写里面的话,...

明白了,谢谢!
页: [1]
查看完整版本: 信任求助