这段函数怎么理解?
本帖最后由 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 因为你调用func时,并没有用return func(n)的方式来调用,也就是说,
调用func的函数会继续执行,你把func(n)改成return func(n)就可以了。 因为你递归了呀
if n:
func(n)
只要 n 不为 零 就会重新调用一次 func 函数 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 16:02 编辑
hellolouis 发表于 2020-6-5 15:50
只要 n 不为 零 就会重新调用一次 func 函数,这个可以理解。
但是不懂得是当n为零的时候,比如:
你对递归理解不够深噢,遇到递归就进入递归了递归结束也要出递归 每次递归出来 都要执行
n += 1
print(n) 你就这么想,第一次3输入进去,然后减1,进入函数调用,但是这个函数还没结束呢,下面还要加1,这个时候2就是被调用的数,进行减1,然后进入函数调用,下面的加1还没有运行,就先放在这等着,。。。。然后等到零跳出这个调用的时候,就需要把这个加1,依次加上。 有点意思 这种题,开始不理解就背住,后边再遇到就理解了。哈哈
小葵花课堂 发表于 2020-6-5 16:25
你就这么想,第一次3输入进去,然后减1,进入函数调用,但是这个函数还没结束呢,下面还要加1,这个时候2就 ...
多谢,这就好理解了 rsj0315 发表于 2020-6-5 16:26
这种题,开始不理解就背住,后边再遇到就理解了。哈哈
6楼的大佬说得比较好理解
页:
[1]