hellolouis 发表于 2020-6-5 15:26:07

这段函数怎么理解?

本帖最后由 hellolouis 于 2020-6-18 11:55 编辑

def func(n):
    print(n)
    n -= 1
    if n:
      func(n)
    n += 1
    print(n)

>>> func(3)
3
2
1
1
2
3


为什么不是输出3 2 1 1呢?

我的理解是:

#假设已经输出了3 2 1

print(1)        #n = 1
1 -= 1        #n = 0, 跳过if判断
0 += 1
print(1)       

这里输出1,不应该已经结束了吗?剩下的23是怎么得来的呢




-----------------------------------------------------------------------------
黑马257集有介绍:

https://s1.ax1x.com/2020/06/18/NeKAO0.png

qiuyouzhi 发表于 2020-6-5 15:28:41

因为你调用func时,并没有用return func(n)的方式来调用,也就是说,
调用func的函数会继续执行,你把func(n)改成return func(n)就可以了。

Twilight6 发表于 2020-6-5 15:28:47

因为你递归了呀
if n:
      func(n)
只要 n 不为 零 就会重新调用一次 func 函数

hellolouis 发表于 2020-6-5 15:50:27

Twilight6 发表于 2020-6-5 15:28
因为你递归了呀

只要 n 不为 零 就会重新调用一次 func 函数

只要 n 不为 零 就会重新调用一次 func 函数,这个可以理解。

但是不懂得是当n为零的时候,比如:

print(n)      #n等于1,输出1
n -= 1          #问题在这里,n等于0的时候
if n:
    func(n)   #n等于0不调用函数
n += 1
print(n)      #输出1



最后输出1不应该是已经结束了吗?

不懂最后输出的2和3是怎样得来的

Twilight6 发表于 2020-6-5 15:53:31

本帖最后由 Twilight6 于 2020-6-5 16:02 编辑

hellolouis 发表于 2020-6-5 15:50
只要 n 不为 零 就会重新调用一次 func 函数,这个可以理解。

但是不懂得是当n为零的时候,比如:


你对递归理解不够深噢,遇到递归就进入递归了递归结束也要出递归 每次递归出来 都要执行
n += 1
print(n)

小葵花课堂 发表于 2020-6-5 16:25:20

你就这么想,第一次3输入进去,然后减1,进入函数调用,但是这个函数还没结束呢,下面还要加1,这个时候2就是被调用的数,进行减1,然后进入函数调用,下面的加1还没有运行,就先放在这等着,。。。。然后等到零跳出这个调用的时候,就需要把这个加1,依次加上。

rsj0315 发表于 2020-6-5 16:25:50

有点意思

rsj0315 发表于 2020-6-5 16:26:27

这种题,开始不理解就背住,后边再遇到就理解了。哈哈

hellolouis 发表于 2020-6-5 17:38:17

小葵花课堂 发表于 2020-6-5 16:25
你就这么想,第一次3输入进去,然后减1,进入函数调用,但是这个函数还没结束呢,下面还要加1,这个时候2就 ...

多谢,这就好理解了

hellolouis 发表于 2020-6-5 17:38:55

rsj0315 发表于 2020-6-5 16:26
这种题,开始不理解就背住,后边再遇到就理解了。哈哈

6楼的大佬说得比较好理解
页: [1]
查看完整版本: 这段函数怎么理解?