我在阅读有关"反转"徽章的答案时,发现有一个关于递归的问题,其中OP没有在前期做好大部分作业。除了一些非常有趣的答案外,@machielo发布了一个使用Python编写的答案,我不得不在我的计算机上运行它才能理解。但我仍然没有理解它。
def recursive(x):
if x > 10:
print recursive(x/10)
return x%10
>>> recursive(2678)
2
6
7
8
我尝试了第一个猜测,但我知道它是错误的。
>>> 2678/10
267
>>> 267/10
26
>>> 26/10
2
>>> 2%10
2
好的...这就是两个数了。那么这如何评估x
中其他数字的输出?
编辑
我不理解这里的print
语句。我将代码修改为:
>>> def recursive(x):
if x > 10:
print x
print recursive(x/10)
return x%10
>>> #I will comment the interpreter session here...
>>> recursive(2345)
2345 # first feed in...print the raw number `x`
234 # 2345/10 does equal 234...the 5 is being held back somewhere...
23 # and each pass through the recursive loop removes the last digit...
2 # but where was it being stored at, so that each evaluation of
3 # x > 10 finally started returning False
4 # and returns the number, exiting the function
5 # ...
我认为在每次运行时,对print recursive(x/10)
的调用都会创建一个新的函数对象,每个对象都有自己全新的基本情况和输入......
还有其他提示吗?
最后
感谢大家。我现在觉得已经理解了...诀窍并不是print
,而是x%10
。2345%10 == 5
...
>>> def recursive(x):
print "Raw `x`:", x
if x > 10:
print "Recurse `x`:", x
print recursive(x/10)
print "Last `x`:", x
return x%10
>>> recursive(2345)
Raw `x`: 2345
Recurse `x`: 2345
Raw `x`: 234
Recurse `x`: 234
Raw `x`: 23
Recurse `x`: 23
Raw `x`: 2
Last `x`: 2
2
Last `x`: 23
3
Last `x`: 234
4
Last `x`: 2345
5
此外,要感谢那些更新了我之前链接的初始答案的人...我即将给你的评论点赞:
>>> def recursive(x):
if x >= 10:
print recursive(x/10)
return x%10
x
中的每个数字”是什么意思? - Ricardo CárdenesPython 2.7.1
。 - yurisich