亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python while 無限循環

python while 無限循環

哆啦的時光機 2019-02-07 12:06:29
不明白為什么這個函數不寫break會無限循環,求大神幫助def diedai(size):size=size+1print("循環外size=",size)while (size<=2):    print("循環內size=",size)     diedai(size)     #breakdiedai(1)關注 | 4收藏 | 1
查看完整描述

2 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超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 = 2print("循環外size=", size)while (size <= 2):    print("循環內size=", size)    print("循環外size=", size + 1)


查看完整回答
反對 回復 2019-02-19
?
繁花不似錦

TA貢獻1851條經驗 獲得超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-02-19
  • 2 回答
  • 0 關注
  • 1190 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號