不明白為什么這個函數(shù)不寫break會無限循環(huán),求大神幫助def diedai(size):size=size+1print("循環(huán)外size=",size)while (size<=2): print("循環(huán)內(nèi)size=",size)
diedai(size)
#breakdiedai(1)關(guān)注 | 4收藏 | 1
2 回答
明月笑刀無情
TA貢獻1828條經(jīng)驗 獲得超4個贊
因為第一次調(diào)用的時候 while的size就一直等于2 就一直沒退出來過 相當(dāng)于
def diedai(size): size=size+1
print("循環(huán)外size=",size) while (size<=2): print("循環(huán)內(nèi)size=",2)
diedai(2)
diedai(1)diedai(2) 只會++然后進行打印
所以相當(dāng)于執(zhí)行這一段代碼
size = 2print("循環(huán)外size=", size)while (size <= 2): print("循環(huán)內(nèi)size=", size) print("循環(huán)外size=", size + 1)
繁花不似錦
TA貢獻1851條經(jīng)驗 獲得超4個贊
原代碼:
def diedai(size):
size = size + 1
print("循環(huán)外size=", size)
while (size<=2):
print("循環(huán)內(nèi)size=", size) # a
diedai(size) # b
# break
print("diedai 函數(shù)結(jié)束, size=", size)
diedai(1)樓上說的很對, 當(dāng)你第一次調(diào)用 detail()這個函數(shù)時, 函數(shù)進入while循環(huán), 就沒在跳出來, 原因是你在b步傳遞的size只決定下次調(diào)用diedai()函數(shù)會不會進入while循環(huán), 并不會真正改變size的值
我再補充一點, 首先要知道這個函數(shù)邏輯類似遞歸函數(shù)
執(zhí)行結(jié)果的前部分為
循環(huán)外size= 2循環(huán)內(nèi)size= 2 # 第一個"循環(huán)內(nèi)"循環(huán)外size= 3diedai 函數(shù)結(jié)束, size= 3循環(huán)內(nèi)size= 2循環(huán)外size= 3diedai 函數(shù)結(jié)束, size= 3循環(huán)內(nèi)size= 2循環(huán)外size= 3diedai 函數(shù)結(jié)束, size= 3循環(huán)內(nèi)size= 2循環(huán)外size= 3diedai 函數(shù)結(jié)束, size= 3...
從第一個"循環(huán)內(nèi)"開始到下一個"diedai 函數(shù)結(jié)束", 就為一個while循環(huán), 這個循環(huán)執(zhí)行的順序就是 a b a b a ..., 整個函數(shù)一直在執(zhí)行這兩行代碼,
若將while改為if, 函數(shù)就變?yōu)檫f歸函數(shù), 當(dāng)條件不滿足時, 就會一層層跳出遞歸函數(shù)
添加回答
舉報
0/150
提交
取消
