鱼C论坛

 找回密码
 立即注册
查看: 1824|回复: 2

[已解决]23、24讲课后习题疑问

[复制链接]
发表于 2017-4-4 20:59:28 | 显示全部楼层 |阅读模式

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

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

x
题目:写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例get_digits(12345)==>[1,2,3,4,5]

以下是甲鱼哥的答案:运行后结果就是[1,2,3,4,5]
result = []
def get_digits(n):
        if n > 0:
                result.insert(0, n%10)
                get_digits(n//10)

get_digits(12345)
print(result)

我看了后因为对result放在外部 感觉有点疑惑 所以就试了下放里面:
def get_digits(n):
    result = []
    if n > 0:
        result.insert(0, n%10)
        get_digits(n//10)
    print(result,end=‘’)

get_digits(12345)

按我这样 运行出来的结果是
[][1][2][3][4][5]

是什么原因导致这个输出结果是不一样??
最佳答案
2017-4-4 21:47:22
你可以拿纸笔画一画:
def get_digits(n):
    result = []
    if n > 0:
        result.insert(0, n%10)
        get_digits(n//10)
    print(result,end=‘’)
get_digits(12345)

n=12345  result.insert(0, n%10)  出来的结果是 result =[5]   又递归了个 get_digits(1234)

n=1234    result.insert(0, n%10)  出来的结果是 result =[4](因为一开始函数里有个重置动作result = [])   又递归了个 get_digits(123)

n=123    result.insert(0, n%10)  出来的结果是 result =[3](因为一开始函数里有个重置动作result = [])   又递归了个 get_digits(12)

n=12    result.insert(0, n%10)  出来的结果是 result =[2](因为一开始函数里有个重置动作result = [])   又递归了个 get_digits(1)

n=1    result.insert(0, n%10)  出来的结果是 result =[1](因为一开始函数里有个重置动作result = [])   又递归了个 get_digits(0)

n=0  if n >0: 不成立  直接执行print(result, end='')  

n=0 是不是最先执行,所以打印依次是[][1][2][3][4][5]    (这个你自己想想哦,有点绕,递归就有点绕)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-4 21:16:49 | 显示全部楼层
由于你的result是局部变量,每次递归都是一个新的变量,所以result的值分别是:
[]
[1]
[2]
[3]
[4]
[5]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-4 21:47:22 | 显示全部楼层    本楼为最佳答案   
你可以拿纸笔画一画:
def get_digits(n):
    result = []
    if n > 0:
        result.insert(0, n%10)
        get_digits(n//10)
    print(result,end=‘’)
get_digits(12345)

n=12345  result.insert(0, n%10)  出来的结果是 result =[5]   又递归了个 get_digits(1234)

n=1234    result.insert(0, n%10)  出来的结果是 result =[4](因为一开始函数里有个重置动作result = [])   又递归了个 get_digits(123)

n=123    result.insert(0, n%10)  出来的结果是 result =[3](因为一开始函数里有个重置动作result = [])   又递归了个 get_digits(12)

n=12    result.insert(0, n%10)  出来的结果是 result =[2](因为一开始函数里有个重置动作result = [])   又递归了个 get_digits(1)

n=1    result.insert(0, n%10)  出来的结果是 result =[1](因为一开始函数里有个重置动作result = [])   又递归了个 get_digits(0)

n=0  if n >0: 不成立  直接执行print(result, end='')  

n=0 是不是最先执行,所以打印依次是[][1][2][3][4][5]    (这个你自己想想哦,有点绕,递归就有点绕)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 21:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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