不明白為什么這個函數不寫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)

繁花不似錦
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
, 函數就變為遞歸函數, 當條件不滿足時, 就會一層層跳出遞歸函數
添加回答
舉報
0/150
提交
取消