2 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個贊
因?yàn)榈谝淮握{(diào)用的時(shí)候 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)
只會++然后進(jìn)行打印
所以相當(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貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超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í), 函數(shù)進(jìn)入while
循環(huán), 就沒在跳出來, 原因是你在b步傳遞的size
只決定下次調(diào)用diedai()
函數(shù)會不會進(jìn)入while
循環(huán), 并不會真正改變size
的值
我再補(bǔ)充一點(diǎn), 首先要知道這個函數(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í), 就會一層層跳出遞歸函數(shù)
添加回答
舉報(bào)