这个递归函数怎么理解

2019-08-14 20:40:11 +08:00
 happykjoy
在 python 中这个 return ( val )为什么递归可以使函数倒着 print 呢?

def divide(n,val):
n += 1


if val / 2 > 1:
aa = divide(n,val/2)
print(aa)
print(n)

return(val)

divide(0,50.0)

运行结果:
1.5625
5
3.125
4
6.25
3
12.5
2
25.0
1
这个怎么理解呢??
2283 次点击
所在节点    Python
7 条回复
Livid
2019-08-14 20:42:27 +08:00
V2EX 的主贴里是支持使用 Markdown 来格式化代码的。

```python

Your code is here

```
ranleng
2019-08-14 21:09:04 +08:00
因为你 print 在 调用自己的 后面运行的
noqwerty
2019-08-14 21:15:36 +08:00
你可以纸笔写一下执行 divide(0, 4)的时候每一步是什么样的,理解了概念就好了
cherbim
2019-08-14 21:17:45 +08:00
不就该这样输出么,第一次递归的时间,aa,nd 都没被输出,第二次也没输出,...最后一次递归 aa,n 才输出,然后依次往上返回输出
Universe
2019-08-14 21:35:38 +08:00
这个可以去理解一下二叉树递归方式的后序,中序,前序遍历
happykjoy
2019-08-15 10:35:10 +08:00
谢谢各位朋友的回复。
我把代码改了,试了下,终于明白了
```python

def divide(n,val):
n +=1
if val/2>1:
print(n,val)
aa = divide(n,val/2)
print(n,aa)

divide(2,10.0)

```
结果输出:
```python
3 10.0
4 5.0
5 2.5
5 None
4 None
3 None
```
zhaishunqi
2019-08-15 10:50:35 +08:00
@Livid 回复啥时候能支持 markdown 啊。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/591937

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX