递归问题求助,23,24讲的课后习题
1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==>list1 = []
def get(x):
if x > 0:
list1.append(x%10)
return list1 + get(x//10)
else:
return []
print(get(23))
虽然知道这种解题方式有误,但实在是不明白这种解题的结果为啥是,已经困扰一整天咯,求大神帮忙
本帖最后由 Twilight6 于 2020-6-4 20:22 编辑
递归过程中也会 返回 list1 两次相加 导致一个函数总共加了两次 列表list1
list1 = []
def get(x):
if x > 0:
list1.append(x%10) # 第一次未递归 23 % 10 = 3 加入列表中# 第一次递归 2%10= 2 再次加入列表
return list1 + get(x//10)# 开始进入第一次递归 x//10=2 则递归get(2) 此时list1 =
# 开始进入第二次递归,此时 2//10 = 0 执行递归 get(0) 则返回[] 此时列表 list =
# 第二次递归结束后 返回 get(0) -> get(2) -> get(23)
# 分别的返回值是 [] -> list1+get(0) -> list1 + get(2)所以 这里的 list1 加了两次
else:
return []
print(get(23))
建议list1 = []
def get(x):
if x > 0:
list1.append(x%10)
return get(x//10)
else:
return list1[::-1]
print(get(3425614)) 学习 本帖最后由 伍圆 于 2020-6-4 20:55 编辑
试了下可以这样def get(x):
if x > 0:
list1 = []
list1.append(x%10)
return list1 + get(x//10)
else:
return []
s = get(23)
s.reverse()
print(s)
向大佬们学习 感谢各位向大佬们,已经懂了99.99%了 https://www.cnblogs.com/vamei/archive/2012/07/10/2582795.html
这篇博客有讲这个动态类型,建议可以看看 jy01388519 发表于 2020-6-4 21:03
感谢各位向大佬们,已经懂了99.99%了
哈哈哈哈 你这....很行 Twilight6 发表于 2020-6-4 22:43
哈哈哈哈 你这....很行
你忘记要最佳了{:10_323:}{:10_303:} Stubborn 发表于 2020-6-4 23:20
你忘记要最佳了
{:10_297:}我现在比较想开了
页:
[1]