- 已关闭**。此问题需要details or clarity。当前不接受答案。
- 想要改进此问题?**添加详细信息并通过editing this post阐明问题。
4小时前关门了。
Improve this question
def slice_num(num, lst=None):
if lst is None:
lst = []
if num > 0:
lst.append(num % 10)
slice_num(num//10, lst)
return lst[::-1]
print(slice_num(564))
需要使用递归。从数字中生成一个数字列表是正确的选择吗?
3条答案
按热度按时间6xfqseft1#
您的尝试似乎不错。另一种选择是修改答案递归提取数字:
备选
3bygqnnd2#
你所需要做的就是颠倒
lst.append
和递归调用的顺序,这样,在把 * 余数 * 加到列表末尾之前,* 商 * 就变成了一个数字列表,这样,你就不需要在返回它之前颠倒列表的顺序了。有很多方法可以简化这个过程。
1.您可以通过一次调用获得商和余数:
1.将其分为两个功能:一个递归函数,它在适当的位置修改
lst
,但不返回它;以及一个 Package 器,它 * 只 * 接受一个数字,并确保最初用一个空列表调用帮助器。这遵循Python的约定,即 * 要么 * 修改列表 * 要么 * 返回修改后的值,而不是两者。
1.请注意,您可以使用
divmod
first,并使用q == 0
作为基本情况,这样您就可以无条件地将r
追加到列表中,就像q == 0
thenr == num
一样,它还消除了递归调用_slice_helper(0, lst)
。inb24sb23#
如果你仍然坚持使用递归,尽管从评论中给出的建议,这里有一个简单的方法:
你甚至可以使用一行代码,只要理解上面的代码做什么:
两种方法将产生相同的输出。
输出: