为了账号安全,请及时绑定邮箱和手机立即绑定

python while 无限循环

python while 无限循环

慕森卡 2019-03-04 21:28:48
不明白为什么这个函数不写break会无限循环,求大神帮助def diedai(size):size=size+1print("循环外size=",size)while (size<=2):    print("循环内size=",size)     diedai(size)     #breakdiedai(1)
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

因为第一次调用的时候 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 = 2print("循环外size=", size)while (size <= 2):    print("循环内size=", size)    print("循环外size=", size + 1)


查看完整回答
反对 回复 2019-03-04
?
浮云间

TA贡献1829条经验 获得超4个赞

原代码:

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= 3diedai 函数结束, size= 3循环内size= 2循环外size= 3diedai 函数结束, size= 3循环内size= 2循环外size= 3diedai 函数结束, size= 3循环内size= 2循环外size= 3diedai 函数结束, size= 3...

从第一个"循环内"开始到下一个"diedai 函数结束", 就为一个while循环, 这个循环执行的顺序就是 a b a b a ..., 整个函数一直在执行这两行代码,

若将while改为if, 函数就变为递归函数, 当条件不满足时, 就会一层层跳出递归函数


查看完整回答
反对 回复 2019-03-04
  • 2 回答
  • 0 关注
  • 708 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信