不明白为什么这个函数不写break会无限循环,求大神帮助
def diedai(size):
size=size+1
print("循环外size=",size)
while (size<=2):
print("循环内size=",size)
diedai(size)
#break
diedai(1)
不明白为什么这个函数不写break会无限循环,求大神帮助
def diedai(size):
size=size+1
print("循环外size=",size)
while (size<=2):
print("循环内size=",size)
diedai(size)
#break
diedai(1)
原代码:
def diedai(size):
size = size + 1
print("循环外size=", size)
while (size<=2):
print("循环内size=", size) # a
diedai(size) # b
# break
print("diedai 函数结束, size=", size)
diedai(1)
楼上说的很对, 当你第一次调用 detail()
这个函数时, 函数进入while
循环, 就没在跳出来, 原因是你在b步传递的size
只决定下次调用diedai()
函数会不会进入while
循环, 并不会真正改变size
的值
我再补充一点, 首先要知道这个函数逻辑类似递归函数
执行结果的前部分为
循环外size= 2
循环内size= 2 # 第一个"循环内"
循环外size= 3
diedai 函数结束, size= 3
循环内size= 2
循环外size= 3
diedai 函数结束, size= 3
循环内size= 2
循环外size= 3
diedai 函数结束, size= 3
循环内size= 2
循环外size= 3
diedai 函数结束, size= 3
...
从第一个"循环内"开始到下一个"diedai 函数结束", 就为一个while
循环, 这个循环执行的顺序就是 a b a b a ..., 整个函数一直在执行这两行代码,
若将while
改为if
, 函数就变为递归函数, 当条件不满足时, 就会一层层跳出递归函数
因为当这个程序执行到diedai(2)函数的时候。这个函数里面的size一直是2所以会停不下来。楼主也许是认为迭代到diedai(3)函数的时候size就被改成3了吧但事实上迭代出的函数中的变量与上一层无关。也就是说diedai(3)中的size与diedai(2)中的size无关
size是local变量, while中的diedai执行循环每次执行一次而因内部size=3结束, 但外部size一直为2, while循环不会中断, size如果是global的话才会中断.
4 回答4.4k 阅读✓ 已解决
1 回答3.1k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
因为第一次调用的时候 while的size就一直等于2 就一直没退出来过 相当于
diedai(2)
只会++然后进行打印所以相当于执行这一段代码