奋斗的安仔 发表于 2020-7-12 21:11:55

求助课后作业23、24

答案:
def get_digits(n):
    result = ''
    if n:
      result = get_digits(n//10)
      result += str(n%10)
      print(list(result))
    return list(result)
num = int(input('请输入一个数:'))
print(get_digits(num))


请问“result = get_digits(n//10)”这里去掉“result”为什么输出结果就不一样了

Twilight6 发表于 2020-7-12 21:15:14



一开始 result 默认等于一个空字符串,if 这里的 result 是拿来接收递归过程中 get_digits(n//10) 函数的返回值的

结果你删掉了 result ,导致没有将递归后的返回值没有变量接收,等于就是无用功的递归

而 result 也没再次赋值,所以等于默认初始值 空字符串了,你需要递归返回值,那么就要用一个变量来接收他的返回值


Twilight6 发表于 2020-7-12 21:18:58


你也可以这样:

result = []
def get_digits(n):
    if n:
      get_digits(n//10)
      result.append(str(n%10))
      
num = int(input('请输入一个数:'))
get_digits(num)
print(result)

奋斗的安仔 发表于 2020-7-12 22:27:42

Twilight6 发表于 2020-7-12 21:15
一开始 result 默认等于一个空字符串,if 这里的 result 是拿来接收递归过程中 get_digits(n//10) 函数 ...

感谢您的指导,我还想请问一下程序运行到第四行以后是递归还是继续运行到第七行呢

Twilight6 发表于 2020-7-12 22:29:51

奋斗的安仔 发表于 2020-7-12 22:27
感谢您的指导,我还想请问一下程序运行到第四行以后是递归还是继续运行到第七行呢

先递归,递归返回后执行后面的代码

奋斗的安仔 发表于 2020-7-13 10:48:06

Twilight6 发表于 2020-7-12 22:29
先递归,递归返回后执行后面的代码

十分感谢
页: [1]
查看完整版本: 求助课后作业23、24