第023、024讲:递归中的课后测试题求助
求助第023、024讲:递归中的课后测试题如下,我编写的程序中有一点问题,希望大神能帮忙看一下,问题到底出在哪里了,谢谢
题目:写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==>
我的代码:
def get_digits(x):
empty =[]
if x // 10 < 1:
empty.append(x)
else:
empty.insert(0,x % 10)
empty.insert(0,get_digits(int(x / 10)))
return empty
x = int(input('请输入数x:'))
result = get_digits(x)
print(result)
运行得到的结果如图所示,每次向空列表中插入的应该是元素,但是我得到的结果是插入了一个个列表,我不太知道问题出在哪里了
每次递归过程中,会生成一个新的列表。
def get_digits(x, empty=None):
if empty is None: empty = list()
因为递归 get_digits(int(x / 10)) 时候是返回的一个列表 而不是元素 else 中的第二句,insert插入的是get_digits的返回值,而函数的返回值就是列表,所以就出问题了。
应该用extend,将一个列表的所有元素追加到列表后面
手机编辑,代码可能会有缩进问题。
def get_digits(x):
empty =[]
if x // 10 < 1:
empty.append(x)
else:
empty.extend(get_digits(int(x / 10)))
empty.append(x % 10)
return empty 因为你每次递归的时候,都会重新创建一个empty空列表 非常感谢的大家的解答, 已经明白了 sunrise085 发表于 2020-6-2 19:20
else 中的第二句,insert插入的是get_digits的返回值,而函数的返回值就是列表,所以就出问题了。
应该用e ...
非常感谢大神,已经搞明白了
页:
[1]