鍍金池/ 問答/Python  網(wǎng)絡(luò)安全/ return不正常退出函數(shù),好奇怪!

return不正常退出函數(shù),好奇怪!

這個代碼很low,但是return的好奇怪,如果不加return上面那個print就會無限循環(huán),實在是看不明白???求解答

def collatz(number):
    if number % 2 == 0:
        a = number // 2
        print(a)

    else:
        a = 3 * number + 1
        print(a)
    while a != 1:
        collatz(a)
        print(a)#如果不加這個print就會無限循環(huán),為什么
        
    return a

print(collatz(4))
回答
編輯回答
下墜

產(chǎn)生無線循環(huán)的根本原因是第一次執(zhí)行后a=2,while進入死循環(huán),你可以試著改為,這時候會一直打印a的值2

while a != 1:
    print(a)#如果不加這個print就會無限循環(huán),為什么
#coding:utf-8

這是我對你的代碼改了一些,加了一些注釋,你看一下

 def collatz(number):
        if number % 2 == 0:     #第一次,4%2 = 0,進入下一行,第2,3,4...次,2%2 = 0,進入下一行
            a = number // 2     #第一次,,a=2,第2,3,4...次,a=1,執(zhí)行13行 print '單個while循環(huán)中,執(zhí)行collatz(2)的結(jié)完畢'
            print(a)
    
        else:
            a = 3 * number + 1
            print(a)
        while a != 1:          #進入死循環(huán),
            collatz(a)         #進入collatz(2),第2次
            print(a)  # 如果不加這個print就會無限循環(huán),為什么
        print '單個while循環(huán)中,執(zhí)行collatz(2)的結(jié)完畢'
        return a
    print(collatz(4))
2018年1月11日 08:32