|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题:
result.insert(0, n%10) #取出的余数是5,但是为何会放在0的位置上,之后是如何排序的?
get_digits(n//10) #取出的整数值是1234,但是为何在内部调用函数本身
还有内部对12345的分解计算的过程是怎么样的,还请求值大神!
hi 该题属于递归函数的基础用法
以345为例,分解如下 #12345分解起来太长了,我偷点懒,原理都是一样的
- result = []
- def get_digits(n):
- if n > 0:
- result.insert(0,n%10)
- get_digits(n//10)
- 第一轮
- n = 345, n>0,if条件有效,345 %10 求余得到 5,result.insert(0,5) ,将5插入到列表result的首位,result当前值为[5]
- n // 10 地板除得到 34,即 get_digits(34),开启第二轮
- 第二轮
- n = 34, n>0,if条件有效,34 %10 求余得到 4,result.insert(0,4) ,将4插入到列表result的首位,result当前值为[4,5]
- n // 10 地板除得到 3,即 get_digits(3),开启第三轮
- 第三轮
- n = 3, n>0,if条件有效,3 %10 求余得到 3,result.insert(0,3) ,将3插入到列表result的首位,result当前值为[3,4,5]
- n // 10 地板除得到 0,即 get_digits(0),开启第四轮
- 第四轮
- n = 0, if条件无效,因此不会调用get_digits()函数了
- 该题的注意事项:
- (1)递归一定要设定返回条件(例题中通过if条件实现),否则会陷入死循环。递归理解起来确实比较困难,慢慢来 :)
- (2)掌握求余、地板除和if语句的基本使用
- (3)列表insert方法的使用
复制代码
>>> get_digits(345)
>>> result
[3, 4, 5]
|
|