递归课后作业
问题:1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==>
我的代码:
>>> def get_digits(n):
list1 = []
n1 = n/10
n2 = (n1 - n//10)*10
n3 = 1
if n1 <= 0:
return list1.insert(0,n2)
else:
list1.insert(0,n2)
return get_digits(n//10)
while n1 <= 0 and n3:
print(list1)
n3 -= 1
>>> get_digits(123456)
>>>
(ps:吐槽一下,递归是真的好难啊{:10_285:} {:10_285:} ) 本帖最后由 sunrise085 于 2020-4-1 14:46 编辑
你的程序最终返回的值是list1.insert()的返回值,但是该函数的返回值为None
n1 是个小数,我猜你可能是打算这样写
n1=n//10
n2=n%10
你的递归没有向回反馈运算结果,仅仅是吧最深层的一个值逐层返回了,所以最后的结果实际上就是一个值,而得不到一个列表
while循环永远不会被执行,因为if和else中都有return,所以前面不管遇到什么情况都会return,程序根本运行不到while循环
def get_digits(n):
s=[]
if n>10:
s=get_digits(n//10)
s.append(n%10)
else:
s.append(n)
return s
print(get_digits(0))
print(get_digits(9))
print(get_digits(12345)) print(list(map(int , list(str(123456))))) 本帖最后由 永恒的蓝色梦想 于 2020-4-1 15:53 编辑
def get_digits(n):
if n<0:
n=-n
res=[-1]
else:
res=[]
while n:
res.append(n%10)
n//=10
return (*reversed(res),) 看不懂你的思路……
list1 应该是一个全局变量,不然每次递归,list1 都会被清空。
应该这样:
list1 = []
def get_digits(n):
n1 = n // 10 # 需要使用地板除
n2 = n % 10
if n1 <= 0:
list1.insert(0, n2)
return list1
else:
list1.insert(0, n2)
return get_digits(n1)
print(get_digits(12345)) @sunrise085 多谢解答!
@永恒的蓝色梦想 你的那个代码不是递归,不过还是多谢!
@zltzlt 多谢!
页:
[1]