python while 无限循环

不明白为什么这个函数不写break会无限循环,求大神帮助
def diedai(size):

size=size+1
print("循环外size=",size)
while (size<=2):
    print("循环内size=",size)
    diedai(size)
    #break

diedai(1)

clipboard.png

阅读 5.6k
4 个回答

因为第一次调用的时候 while的size就一直等于2 就一直没退出来过 相当于

def diedai(size):

    size=size+1
    print("循环外size=",size)
    while (size<=2):
        print("循环内size=",2)
        diedai(2)

diedai(1)

diedai(2) 只会++然后进行打印

所以相当于执行这一段代码

size = 2
print("循环外size=", size)
while (size <= 2):
    print("循环内size=", size)
    print("循环外size=", size + 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的话才会中断.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题