fujy 发表于 2020-9-19 20:11:20

递归问题

m = []
def get_digits(n):
   
    if n//10:
      m.append(n%10)
      get_digits(n//10)
      
    else:
      m.append(n%10)
    print(m)
get_digits(1234)

这个得到的结论为什么是





而不是





但是
def get_digits(n):
   
    if n//10:
      get_digits(n//10)
      m.append(n%10)
    else:
      m.append(n%10)
    print(m)
get_digits(1234)

运行结果就是



昨非 发表于 2020-9-19 20:26:03

m = []
def get_digits(n):
   
    if n//10:
      m.append(n%10) #加入最后一位(先)
      get_digits(n//10) #经过递归调用,从后往前除最后一位已全部加入m中
      
    else:
      m.append(n%10)
    print(m)
get_digits(1234)






def get_digits(n):
   
    if n//10:
      get_digits(n//10) #先递归,再将最后一位加入m中
      m.append(n%10)
    else:
      m.append(n%10) #在“出栈”环节,第一个加入m中的反而是入栈的最后一个
    print(m)
get_digits(1234)

Lamedadada 发表于 2020-9-19 20:40:18

       m.append(n%10)
      get_digits(n//10)
      
是先把余加在列表后面再调用本身
递归时走到get_digits(n//10)又进入递归
没有机会print
结束后 每退出一层递归print一次
这时候append()已经进行了四次
第一层是1234%10是4
依次append以后是4321
之后再print4次
所以每次print()都是4321

    if n//10:
      get_digits(n//10)
      m.append(n%10)
    else:
      m.append(n%10)
    print(m)
get_digits(1234)


先递归了4次,每退出一层 append一次
然后print 所以最后一层是1234%10等于1
先打印1 后面依次234
页: [1]
查看完整版本: 递归问题