【Python】python的递归中return返回none

代码:

#求最大公约数
def gcd(x,y):
    if x < y:
        swap = x
        x = y
        y = swap
    if x%y == 0:
        return y
    else:
        gcd(y,x%y)
print(gcd(10,20))
print(gcd(20,15))

输出结果:

10
None

 

如果将return y替换成print(y),是可以正确输出结果的。

查阅了网上的文章,有说是在递归的每一个分支都需要给出一个return,于是将代码改为:

def gcd(x,y):
    if x < y:
        swap = x
        x = y
        y = swap
    if x%y == 0:
        return y
    else:
        return (gcd(y,x%y))  #只改动了此行
print(gcd(10,20))
print(gcd(20,15))

  

分析:

(1)return的作用是将函数结果返回,即退出def函数模块。

(2)当函数没有显式return,默认返回none。

(3)最后得出的分析过程是(以gcd(20,15)为例),第一次调用的时候,执行了gcd(15,5),那么此时gcd(15,5)return的值,是给到第一次调用那里的,而第一次调用没有显式return语句,于是return的就是none。

 

posted @ 2019-01-22 16:39  半枫在努力  阅读(1180)  评论(0编辑  收藏  举报