return不正常退出函数,好奇怪!

这个代码很low,但是return的好奇怪,如果不加return上面那个print就会无限循环,实在是看不明白!?求解答

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就会无限循环,为什么
        
    return a

print(collatz(4))
阅读 3.1k
1 个回答

产生无线循环的根本原因是第一次执行后a=2,while进入死循环,你可以试着改为,这时候会一直打印a的值2

while a != 1:
    print(a)#如果不加这个print就会无限循环,为什么
#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,执行13行 print '单个while循环中,执行collatz(2)的结完毕'
            print(a)
    
        else:
            a = 3 * number + 1
            print(a)
        while a != 1:          #进入死循环,
            collatz(a)         #进入collatz(2),第2次
            print(a)  # 如果不加这个print就会无限循环,为什么
        print '单个while循环中,执行collatz(2)的结完毕'
        return a
    print(collatz(4))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题