两段程序都用了递归,在这个程序中,有没有return没有什么区别,反正用的都是全局变量result。但是实际上函数有没有return语句差别还是很大的。
下面重点说一下两端程序的运行过程。
先用insert,后递归:(我们假设n=123,层数少一些,道理是一样的)
第一层:n=123, result.insert(0, n%10)之后,result=[3],然后get_digits(n//10),进入第二层,
第二层:n=12,result.insert(0, n%10)之后,result=[2,3],然后get_digits(n//10),进入第三层,
第三层,n=1,result.insert(0, n%10)之后,result=[1,2,3],然后get_digits(n//10),进入第四层,
第四层,n=0,已经不符合 if n>0的条件,因此不会再执行if模块的语句,即不会再次调用递归函数get_digits(),
结束第四层get_digits(),返回第三层;
结束第三层get_digits(),返回第二层;
结束第二层get_digits(),返回第一层;
结束第一层get_digits(),返回主函数。
此时,result=[1,2,3].
先调用递归,后用insert:(我们同样假设n=123)
第一层:
n=123, get_digits(n//10),进入第二层,
第二层:
n=12,get_digits(n//10),进入第三层,
第三层,
n=1,get_digits(n//10),进入第四层,
第四层,
n=0,已经不符合 if n>0的条件,因此不会再执行if模块的语句,即不会再次调用递归函数get_digits(),
结束第四层get_digits(),返回第三层;
result.insert(0, n%10)之后,result=[1],结束第三层get_digits(),返回第二层;
result.insert(0, n%10)之后,result=[2,1],结束第二层get_digits(),返回第一层;
result.insert(0, n%10)之后,result=[3,2,1],结束第一层get_digits(),返回主函数。
此时,result=[3,2,1].
另外,你可以看一下这个帖子,我在这里也有回答。
之前的回答