鱼C论坛

 找回密码
 立即注册
查看: 2010|回复: 3

[已解决]递归小练习的问题

[复制链接]
发表于 2020-11-20 10:46:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目要求:将参数n分解出每个位的数字并按顺序存放在列表中,例如123 --> [1,2,3]

result = []
def get_digits(n):
    if n>0:
        result.insert(0,n%10)
        get_digits(n//10)

get_digits(123)
print(result)

我的问题是:
递归是从最里面一层算起嘛?就是先算“1”对是取余,得到结果为“1”,再算“2”对10取余,得到结果为“2”,然后再算“3”对“10”取余,得到结果为“3”。
如果是这样,那么insert这个bif从0插入的话,不应该是[3,2,1]嘛?
求大佬说一下运行逻辑!
最佳答案
2020-11-20 11:48:13

递归是从最里面一层算起嘛?


递归是一步一步进入,进入后在一步一步返回

举个例子,看下 get_digits(123) 的执行顺序吧:

get_digits(123) --> if 123 > 0 --> True --> result.insert(0,123%10) --> get_digits(n//10)

123%10 = 3 插入 result = [] 中得  result = [3]

进入第一次递归:

get_digits(12) --> if 12 > 0 --> True --> result.insert(0,12%10) --> get_digits(12//10)

12%10 = 2 插入 result = [3] 中得  result = [2,3]

进入第二次递归:

get_digits(1) --> if 1 > 0 --> True --> result.insert(0,1%10) --> get_digits(1//10)

1%10 = 1 插入 result = [2,3] 中得  result = [1,2,3]


进入第三次递归:

get_digits(0) --> if 0 > 0 --> False

则最终返回 result = [1, 2, 3]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-20 10:54:00 | 显示全部楼层
你自己看一下你的程序撒
很明显是先insert,然后再递归的嘛。也就是一层一层深入的。
若想从最里面一层算起,那么把if后的这两行换一下位置,那么就是先进入递归,然后再回来计算了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 10:59:33 | 显示全部楼层
先123%10 = 3  insert后 result =[3]
12%10 = 2  insert后 result =[2,3]
1%10 = 1  insert后 result =[1,2,3]
想要3,2,1 用append 或者 insert一个大于等于你期望数组长度的值 如result.insert(3,n%10)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 11:48:13 | 显示全部楼层    本楼为最佳答案   

递归是从最里面一层算起嘛?


递归是一步一步进入,进入后在一步一步返回

举个例子,看下 get_digits(123) 的执行顺序吧:

get_digits(123) --> if 123 > 0 --> True --> result.insert(0,123%10) --> get_digits(n//10)

123%10 = 3 插入 result = [] 中得  result = [3]

进入第一次递归:

get_digits(12) --> if 12 > 0 --> True --> result.insert(0,12%10) --> get_digits(12//10)

12%10 = 2 插入 result = [3] 中得  result = [2,3]

进入第二次递归:

get_digits(1) --> if 1 > 0 --> True --> result.insert(0,1%10) --> get_digits(1//10)

1%10 = 1 插入 result = [2,3] 中得  result = [1,2,3]


进入第三次递归:

get_digits(0) --> if 0 > 0 --> False

则最终返回 result = [1, 2, 3]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 22:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表